1.新建MDI应用程序
2 重写CMainFrame的OnClose消息
void CMainFrame::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
HKEY key;
CString appKey = _T("software\\Test\\Setting");
CString keyName = _T("WinState");
if (RegOpenKeyEx(HKEY_CURRENT_USER,appKey,0,KEY_WRITE,&key)!=ERROR_SUCCESS)
{
DWORD disposition;
RegCreateKeyExW(HKEY_CURRENT_USER,appKey,0,_T(""),REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&key,&disposition);
}
WINDOWPLACEMENT winInfo;
GetWindowPlacement(&winInfo);
RegSetValueExW(key, keyName, 0, REG_BINARY, (LPBYTE)&winInfo, sizeof(WINDOWPLACEMENT));
RegCloseKey(key);
CMDIFrameWnd::OnClose();
}
3 修改CAPP的InitInstance()的代码
BOOL CMDI02165App::InitInstance()
{
// 如果一个运行在 Windows XP 上的应用程序清单指定要
// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
//则需要 InitCommonControlsEx()。 否则,将无法创建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 将它设置为包括所有要在应用程序中使用的
// 公共控件类。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
// 初始化 OLE 库
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
EnableTaskbarInteraction(FALSE);
// 使用 RichEdit 控件需要 AfxInitRichEdit2()
// AfxInitRichEdit2();
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU)
// 注册应用程序的文档模板。 文档模板
// 将用作文档、框架窗口和视图之间的连接
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_MDI02165TYPE,
RUNTIME_CLASS(CMDI02165Doc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CMDI02165View));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
// 创建主 MDI 框架窗口
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame;
return FALSE;
}
m_pMainWnd = pMainFrame;
// 分析标准 shell 命令、DDE、打开文件操作的命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
// 调度在命令行中指定的命令。 如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
if (!ProcessShellCommand(cmdInfo))
return FALSE;
HKEY key;
DWORD keyType = REG_BINARY;
DWORD keySize = sizeof(WINDOWPLACEMENT);
WINDOWPLACEMENT winInfo;
LONG regInfo= -1;
CString appKey = _T("software\\Test\\Setting");
CString keyName = _T("WinState");
if (RegOpenKeyExW(HKEY_CURRENT_USER,appKey,0,KEY_READ,&key)==ERROR_SUCCESS)
{
regInfo = RegQueryValueExW(key, keyName, 0, &keyType, (LPBYTE)&winInfo, &keySize);
RegCloseKey(key);
}
if (regInfo==ERROR_SUCCESS)
{
m_pMainWnd->SetWindowPlacement(&winInfo);
}
else
{
m_pMainWnd->ShowWindow(m_nCmdShow);
}
// 主窗口已初始化,因此显示它并对其进行更新
/*pMainFrame->ShowWindow(m_nCmdShow);*/
/*pMainFrame->ShowWindow(SW_SHOWMAXIMIZED);*/
pMainFrame->UpdateWindow();
return TRUE;
}