您的位置:首页 > 其它

保存和读取窗口的设置

2007-05-31 16:11 405 查看
首先定义保存窗口属性的注册表中的几个键值:

#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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: