`
feipigwang
  • 浏览: 744472 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

在 框架类响应 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();

以上完成了对 窗体状态的保存

分享到:
评论

相关推荐

    Visual C++ 编程资源大全(源码 窗体)

    通过File菜单中的Create New Frame命令能够创建一个位于顶层的SDI应用,但关闭主应用后其它的窗口也将关闭,程序由Visual C++ 5.0开发(30KB)<END><br>32,picknew.zip 演示如何注册多文档模板且避免MFC自动产生的...

    Visual C++编程技巧精选集 光盘

    159.如何在状态栏窗格中显示鼠标位置 160.如何在状态栏窗格中滚动显示文本 161.如何在状态栏窗格中加载进度条 162.如何在状态栏窗格中加载图像 163.如何在状态栏窗格中播放视频动画 第5章 光标和图标的应用 164....

    Visual C++2010开发权威指南(共三部分).part1.rar

    2.8.2 在框架类中获得当前的文档类和视图类对象指针 101 2.8.3 获得应用程序类对象的指针 101 2.8.4 从应用类对象中获得主框架类对象的指针 101 2.9 小结 102 第3章 Visual C++ 2010 MFC菜单编程 103 3.1 菜单编程 ...

    Visual_C++精彩实例详解

    本书中所有例程在Windows2000 Professonal+VC++6.0(英文企业版+SP5)下调试通过,绝大部分例程可以在Windows98/ME/2000/XP下运行,且可以 在Visual Studio.Net中自动转换为VC.NET工程。建议读者安装Microsoft ...

    Visual_C++精彩实例详解.part2.rar

    本书中所有例程在Windows2000 Professonal+VC++6.0(英文企业版+SP5)下调试通过,绝大部分例程可以在Windows98/ME/2000/XP下运行,且可以 在Visual Studio.Net中自动转换为VC.NET工程。建议读者安装Microsoft ...

    Visual_C++精彩实例详解.part4.rar

    本书中所有例程在Windows2000 Professonal+VC++6.0(英文企业版+SP5)下调试通过,绝大部分例程可以在Windows98/ME/2000/XP下运行,且可以 在Visual Studio.Net中自动转换为VC.NET工程。建议读者安装Microsoft ...

    Visual_C++精彩实例详解.part5.rar

    本书中所有例程在Windows2000 Professonal+VC++6.0(英文企业版+SP5)下调试通过,绝大部分例程可以在Windows98/ME/2000/XP下运行,且可以 在Visual Studio.Net中自动转换为VC.NET工程。建议读者安装Microsoft ...

    Visual_C++精彩实例详解.part3.rar

    本书中所有例程在Windows2000 Professonal+VC++6.0(英文企业版+SP5)下调试通过,绝大部分例程可以在Windows98/ME/2000/XP下运行,且可以 在Visual Studio.Net中自动转换为VC.NET工程。建议读者安装Microsoft ...

Global site tag (gtag.js) - Google Analytics