最近研究位置保存,稍微总结一下,以后继续补充:
目标
保存应用程序屏幕的巨细、位置和状态,包含每个工具栏或对话条的位置和巨细,以便应用程序在下一次运行时能恢复它们。
策略
当应用程序关闭时,不仅保存主窗口的巨细和位置,而且还把工具栏和状态栏的状态保
存到系统的一个注册区。因此,当应用程序被再次打开时,我们将检索这些消息,并恢复窗
口和工具栏等等。
步骤
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上执行该工程时,可以重定位主窗口,以及重设置主窗口的巨细,然后退出应用
程序。当再次执行该应用程序时,应用程序窗口将恢复到前次退出时的任何巨细和位置。
文章结束给大家分享下程序员的一些笑话语录:
Google事件并不像国内主流媒体普遍误导的那样,它仅仅是中国Z府和美国公司、中国文化和美国文化甚至中国人和美国人之间的关系,是民族主义和帝国主义之间的关系;更重要的是,它就是Z府和公司之间的关系,是权力管制和市场自由之间的关系。从这个意义上说,过度管制下的受害者,主要是国内的企业。Google可以抽身而去,国内的企业只能祈望特区。www.ishuo.cn
---------------------------------
原创文章 By
位置和保存
---------------------------------