SDI 框架視窗(CFrameWnd)內建 LoadFrame/SaveFrame 機制自動記憶位置/大小/最大化狀態。對話框(CDialog)無此機制,需自行實作。
void CMyDialog::OnClose()
{
WINDOWPLACEMENT wp = { sizeof(WINDOWPLACEMENT) };
GetWindowPlacement(&wp);
CWinApp* pApp = AfxGetApp();
pApp->WriteProfileBinary(_T("WindowState"), _T("Placement"),
(BYTE*)&wp, sizeof(wp));
CDialog::OnClose();
}
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
CWinApp* pApp = AfxGetApp();
BYTE* pData = NULL; UINT nBytes = 0;
if (pApp->GetProfileBinary(_T("WindowState"), _T("Placement"), &pData, &nBytes)) {
if (nBytes == sizeof(WINDOWPLACEMENT)) {
WINDOWPLACEMENT* pWp = (WINDOWPLACEMENT*)pData;
SetWindowPlacement(pWp);
}
delete[] pData;
}
return TRUE;
}
WINDOWPLACEMENT 包含:
showCmd:SW_SHOWMAXIMIZED / SW_SHOWNORMAL / SW_SHOWMINIMIZEDrcNormalPosition:還原時的視窗矩形ptMinPosition、ptMaxPosition:最小化/最大化位置WritePrivateProfileStruct / GetPrivateProfileStruct參考百度百科 GetWindowPlacement 詳細說明。實作後,對話框關閉前的最大化/位置/大小將完美還原。