• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何使win98/95應用程序具用記憶功能

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    很多應用程序都具有自動記憶應用程序狀態的功能。這些狀態包括應用程序窗口和位置和大
        很多應用程序都具有自動記憶應用程序狀態的功能。這些狀態包括應用程序窗口和位置和大小。工具欄的位置與排列方式以及程序界面元素的其化狀態。這種功能在下次啟動應用程序后進入上次的運行狀態,使用戶只需一次界面布局便可永久使用,極其方便。

    在win98/95系統中,應用程序的有關信息是保存在注冊表中,所以在應用程序中實現狀態的保存與恢復,首先應弄懂與窗口。工具欄和注冊表等用關的函數和數據結構的用法。

    一。用關窗口和工具欄的記憶函數

    1。讀取窗口狀態函數

      BOOL Getwindowplacement(WINDOWPLACEMENT wp)

      2.設置窗口狀態函數

      BOOL Setwindowplacement(WINDOWPLACEMENT wp)

       3.保存工具欄狀態函數

      void SaveBarState(-T(CString))

        4.恢復工具欄狀態函數

      void LoadBarState(-T(CString))

       其他工具的狀態保存與恢復函數請參閱聯機幫助

    二。用關注冊和字符串的記憶函數

           1.  讀取注冊表中的字符串函數

         CString AfxGetApp()->GetProfileString(szString,......);

           2.將字符串寫入注冊表函數

        void WriteProfileString(xzString,......,szBuffer);

            3.讀取注冊表中參數值函數

        int GetProdileint(-T("General"),-T("ColumnsT"),Default));

    4:將字符串轉換成變量函數

    int _stscanf(strBuffer,szFormat,nParamenter)

    5:將變量轉換成字符串函數

    void wsprintf(szBuffer,szFormat,nParamenter)

    三,有關窗口狀態記憶和數據結構

    窗口狀態在保存和恢復時都必須使用數據結構,WINDOWPLACDMENT其具體結構如下:

    struct WINDOWPLACEMENT{

    UINT     wp.flags,//窗口狀態標志

    UINT wp.showCmd,//窗口顯示狀態

    int wp.ptMinPosition.x,//窗口最小化x坐標

    int WP.ptMinPosition.x,//窗口最小化y坐標

    int wp.ptMaxPosition.x,//窗口最大化x坐標

    int wp.ptMaxPostion.y,//窗口最大化y坐標

    int wp.rcNormalPosition.left,//窗口正常時左坐標

    int wp.rcNormalPosition.top,//窗口正常時頂坐標

    int wp.rcNormalPosition.right,//窗口正常時右坐標

    ent wp.rcNormalPosition.bottom//窗口正常時底坐標

    }LPWINDOWPLACEMENT

    四,記憶窗口和工具欄狀態的注意事項

    要正確保存和恢復應用程序界面狀態,必須對應用于程序窗口和工具欄窗口等均進行保存和恢復,這需要在應用程序的建立和關閉過程功能函數中均進行狀態處理。

    雖然SaveBarState()和LoadBarState()函數可以保存和恢復工具欄的所有默認位置和狀態,但用戶自己實現的功能參數部分并不能被保存,所以應單獨編寫這些參數的保存代碼。如工具欄的排序列格式,列參數,顏色狀態標志和是否存在動態提示功能標志等。

    五,記憶應用程序狀態的實現步驟

    1,首先利用類向導ClassWizard為已建立的應用程序類增加關閉WM-CLOSE消息處理功能函數OnClose().

    2,在MainFrm.cpp中為應用程序狀態設置成員變量

    satic TCHAR BASED-CODE szSetion[]=-T("Settings"):

    static TCHAR BASED-CODE szWindowPos[]=-T("WindowPos"):

    static TCHAR szFormat[]-T(%u,%u,%d,%d,%d,%d,%d,%d,%d,%d"):

    3,編制窗口位置狀態讀取和定入函數

    static BOOL PASCAL NEAR ReadWindowPlacement(

    LPWINDOWPLACEMENT pwp)

    {//窗口位置狀態讀取函數,從注冊文件中

    CString strBuffer=AfxGetApp()->GetProfileString(szSection,szWindowpos);

    if(strBuffer,IsEmpty()) return FALSE;

    WINDOWPLACEMENT wp;//窗口位置數據結構

    int nRead=-stscanf(strBuffer,szFonmat,

    &wp.flags,&wp,showCmd,//為數據結構讀取數值

    &wp.[tMinposition.x,&wp.ptMinposition.y,

    &wp.ptMaxposition.x,&wp.ptMaxposition.y,

    &wp.rcNormalplsition,left,&wp.rcNormalposition.top,

    &wp.rcNormalposition.right,&wp.rcNormalposition.bot,tom);

    if(nRead!=10) return FALSE;

    wp.length=sizeof  wp;//結構大小

    *pwp=wp;     //結構傳遞

    return TRUE;

    }

    static void PASCAL NEAR WriteWindowPlacement(

    LPWINDOWPLACEMENT pwp)

    {//窗口位置狀態寫入函數,定到注冊文件

    TCHAR szBuffer[sizeof("-32767")*8+sizeof("65535")*21];

    wsprintf(szBuffer,szFormat,//將參數值轉換為字符串

    pwp->flags.pwp_>showCmd,

    pwp_>ptMinPosition.x.pwp->ptMinposition.y,

    pwp->ptMaxPosition,x,pwp->ptMaxPosition.y,

    pwp->rcNormalPosition,left,pwp->rcNormalPosition.top,

    pwp=rcNormalPosition.pwp=>rcNormalPosition.bottom);

    AfxGetApp()->WriteProfileString(xzSection.szWindowPos.szBuffer);

    }

    4,在應用程序建立函數OnCreate()中增加狀態讀取和設置功能

    WINDOWPLACEMENT wp;//保存主窗口及工具欄窗口位置狀態

    if (ReadWindoePlacement(&wp))//讀取位置狀態信息

    SetWindowPlacement(&wp);//設置位置狀態信息

    5,在應用程序建立函數NnCreate()中增加工具欄等狀態恢復功能

    m-wndDockToolBar.SetColumns(AfxGetApp()-GetProfileInt(-T("General"),-T("ColumnsT"),3));//恢復列格式,默認為3m-wndDockNextBar.SetColumns(AfxGetApp()->GetProfileInt(-T("General"-T("ColumnsN"),3));

    LoadBarState(-T("General"));//恢復保存的狀態和位置......//其它工具狀態的恢復

    6。在應用程序關閉函數OnClose()中完善狀態保存功能

    void CMainFrame::OnClose()

    {  //保存工具欄等的狀態

    SaveBarState(-T("General"))//保存工具欄狀態......//其它工具狀態的保存

    AfxGetApp()->WriteProfileInt(-T("General"),//寫入列數

    -T("ColumnsT"),m-wndDockTAoolBar.GetColumns());

    AfxGetDApp ()=>WriteProfileInt(-T("General"),//寫入列數

    -T("ColumnsN"),m-wndDockNextBar.GetColumns());

    AfxGetApp()->WriteProfileInt(-T("General"),

    -T("Color"),(m-bColor!=0));//寫入顏色值

    AfxGetApp()->WriteProfileInt(-T("General"),

    -T("ToolTips"),(m-bToolTips!=0));//寫入提示功能

    WINDOWPLACEMENT wp;

    wp.length=sizeof wp;

    if (GetWindowPlacement(&wp)){

    wp.flags=0;

    if (IsZoomed()) wp.flags|=WPF=RESTORETOMAXIMIZED;//如果窗口被放大,則保存為最大化狀態

    WriteWindowPlacement(&wp);

    }

    CFrameWnd::OnClose();

    }

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>