您的位置:首页 > 其它

MFC SDI 中 通过注册表保存当前窗体的 显示状态位置

2011-08-04 15:04 357 查看
在 框架类响应 WM_CLOSE消息的时候添加如下代码



HKEY key; //用于接收注册表项句柄

WINDOWPLACEMENT info; //获得窗体位置状态信息

GetWindowPlacement(&info); //CWnd类的函数获取一个窗体的状态信息

if(ERROR_SUCCESS== //调用 RegOpenKeyEx 打开注册表 返回key 如果成功 返回 ERROR_SUCCESS

RegOpenKeyEx(

HKEY_CURRENT_USER, //要打开的项的句柄 具体看MSDN

"Software\\WolfeLee\\SaveWinState\\Settings", //子项

0, //保留0

KEY_ALL_ACCESS, //所有权限

&key)) //返回子项句柄

{

DWORD des; //用于接收返回信息 这里不用

if(ERROR_SUCCESS==::RegCreateKeyEx ( //如果注册表创建成功 那么返回ERROR_SUCCESS

HKEY_CURRENT_USER,

"Software\\WolfeLee\\SaveWinState\\Settings",

0,

"State", //类型

REG_OPTION_NON_VOLATILE, //在windows重启的时候 我们创建的注册表 依然保存

KEY_ALL_ACCESS, //所有权限

NULL, //默认安全结构

&key, //用于接收HKEY

&des))

{ // 将窗口信息保存到注册表中

RegSetValueEx(key, "WindowState", 0, REG_BINARY, (LPBYTE)&info, sizeof(WINDOWPLACEMENT)); //用二进制的形式保存窗体信息

RegCloseKey(key); // 关闭注册表

}

}



以上完成了 状态的饿保存 我们如何在启动的时候加载注册表信息 在 APP的 初始化函数中 要在 m_pMainWnd->ShowWindow(SW_SHOW) 之前获取窗体信息

添加下面代码









///读取注册表

HKEY key;

DWORD type,n;

WINDOWPLACEMENT info;

if(ERROR_SUCCESS==RegOpenKeyEx(HKEY_CURRENT_USER, //打开先前创建注册表 如果没有键值那么我们调用原来的设置

"Software\\WolfeLee\\SaveWinState\\Settings",

0,

KEY_ALL_ACCESS,

&key))

{

RegQueryValueEx(key, //注册表的句柄

"WindowState", //我们保存的键值的名字

0,

&type, //获取类型

(LPBYTE)&info, //获取 状态信息

&n);

this->m_pMainWnd->SetWindowPlacement(&info); //设置 窗体位置信息

}

else

m_pMainWnd->ShowWindow(SW_SHOW);

m_pMainWnd->UpdateWindow();



以上完成了对 窗体状态的保存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐