保存和读取窗口的设置

首先定义保存窗口属性的注册表中的几个键值:

#define COMPANY_KEY "SunwardCompany"
#define SETTINGS_KEY "Settings"
#define WINDOWPLACEMENT_KEY "Window Placement"

然后是保存窗口的设置。重载窗口的OnClose函数。

void  CHelloWindow::OnClose( void )
{
    SaveBarState(
"Control Bar States");

    WINDOWPLACEMENT wp;
    GetWindowPlacement(
&wp);
    AfxGetApp()
->WriteProfileBinary(SETTINGS_KEY,WINDOWPLACEMENT_KEY,(BYTE*)&wp,sizeof(WINDOWPLACEMENT));
    CFrameWnd::OnClose();
}

 最后就是读取上一次关闭时窗口的设置。

 

int  CHelloWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        
return -1;

    
// TODO:  在此添加您专用的创建代码
    LoadBarState("Control Bar States");

    
return 0;
}


BOOL CHellowApp::InitInstance()
{
//设置注册表的关联项
    SetRegistryKey(COMPANY_KEY) ;

    m_pMainWnd 
= new CHelloWindow();
    m_pMainWnd
->ShowWindow(m_nCmdShow);

    BYTE 
*p;
    UINT size;
    WINDOWPLACEMENT 
*pWP;
    
if (GetProfileBinary(SETTINGS_KEY, WINDOWPLACEMENT_KEY, (LPBYTE *)&pWP, &size))
    
{
        m_pMainWnd
->SetWindowPlacement(pWP);
        delete []pWP;
    }

    
else
    
{
        m_pMainWnd
->ShowWindow(m_nCmdShow);
    }

    m_pMainWnd
->UpdateWindow();

    
return TRUE;
}

 

注册表的位置在:HKEY_CURRENT_USER/Software/<company name>/<application name>/<section name>/<value name>.

注意:因为CFrameWnd的OnCreate和OnClose函数不是虚函数,需要捕获窗口的消息循环。否则是不会运行到你自己写的这两个函数里的。

BEGIN_MESSAGE_MAP(CHelloWindow, CFrameWnd)
 ON_WM_CLOSE()
 ON_WM_CREATE()
END_MESSAGE_MAP()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值