保存应用程序屏幕

来源:互联网 发布:excel每隔n列取数据 编辑:程序博客网 时间:2024/05/01 22:28
目标
保存应用程序屏幕的大小、位置和状态,包括每个工具栏或对话条的位置和大小,以便应用程序在下一次运行时能恢复它们。
策略
当应用程序关闭时,不仅保存主窗口的大小和位置,而且还把工具栏和状态栏的状态保
存到系统的一个注册区。因此,当应用程序被再次打开时,我们将检索这些消息,并恢复窗
口和工具栏等等。
步骤
1. 保存设置值
1) 在系统注册区中定义一个位置,在该位置用一个全局包含文件保存这些信息。
“C o m p a n y”是“公司”名。
#define  COMPANY_KEY "Company"
#define  SETTINGS_KEY "Settings"
#define  WINDOWPALCEMENT_KEY "Window Placement"
2) 在应用程序类的InitInstance( )成员函数中,把COMPANY_KEY 添加到SetRegistryKey( )
中。
SetRegistryKey(COMPANY_KEY);
3) 用ClassWizard把一个WM _ CLOSE消息处理函数添加到CMain Frame类中,用
SaveBarState( ) 可以保存条的位置和大小。用G e t WindowPlacement( )可以得到应用程序的当
前大小和位置,用WriteProfileBinary( )把它的结果保存到系统注册区。
void CMainFrame::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//save state of control bars
SaveBarState("Control Bar States");
//Save size of screen;
WINDOWPLACEMENT  wp;
GetWindowPlacement(&wp);
AfxGetApp()->WriteProfileBinary(SETTINGS_KEY,WINDOWPALCEMENT_KEY,(BYTE*)&wp,sizeof(WINDOWPLACEMENT));
CMDIFrameWnd::OnClose();
}
2. 恢复设置值
1) 再次执行应用程序后,恢复工具栏到它们的初始状态,把下面的代码添加到CMainFrame
类的OnCreate( )成员函数的最后位置。
LoadBarState("Control Bar States");
2) 要从系统注册表中恢复应用程序的主窗口,在应用程序类中找到S h o w Window( )函数,
并用下面的代码替换它。注意,现在我们用S e t WindowPlacement( )恢复主窗口到它的初始大
小和位置。
UINT size;
WINDOWPLACEMENT *wp;
if (GetProfileBinary(SETTINGS_KEY,WINDOWPALCEMENT_KEY,(LPBYTE*)&wp,&size))
{
pMainFrame->SetWindowPlacement(wp);
delete wp;
}
else
{
pMainFrame->ShowWindow(m_nCmdShow);
}
pMainFrame->UpdateWindow();
说明
要把其他选项保存到系统注册表中,以及有关从应用程序访问系统注册表的详细讨论,
 本例只有当用户执行一次应用程序后才能指定应用程序主窗口的位置,要在第一次执
行时初始化应用程序的窗口。
CD说明
当在C D上执行该工程时,可以重定位主窗口,以及重设置主窗口的大小,然后退出应用
程序。当再次执行该应用程序时,应用程序窗口将恢复到上次退出时的任何大小和位置。