我有一个C ++ / MFC应用程序,试图保存和恢复CFrameWnd派生主框架的窗口位置。我在适当的位置进行了 GetWindowPlacement 和 SetWindowPlacement 调用,并且一切似乎都运行良好。
直到最大化后我“存储”窗口。在那种情况下,当我重新打开应用程序并使用调试器来结束我的 SetWindowPlacement 调用时,我看到它已按我的意愿最大化放置。
但是如果我继续执行,则其他操作会将我的窗口“恢复”到非最大大小。我如何发现正在做什么? (因为我没有在其他任何地方调用ShowWindow)
编辑:它似乎源于 CFrameWnd :: InitialUpdateFrame :
int nCmdShow = -1; // default
CWinApp* pApp = AfxGetApp();
if (pApp != NULL && pApp->m_pMainWnd == this)
{
nCmdShow = pApp->m_nCmdShow; // use the parameter from WinMain
pApp->m_nCmdShow = -1; // set to default after first time
}
ActivateFrame(nCmdShow);
如果在启动时将我的应用程序m_nCmdShow设置为SW_MAXIMIZED,则显示为最大化-但始终为最大化!我在 CMainFrame :: OnActivate 中有我的 SetWindowPlacement -应该在其他地方吗?
答案 0 :(得分:-1)
所以在我的应用程序启动中,我这样做了:
WINDOWPLACEMENT* lwp;
UINT nl;
if (AfxGetApp()->GetProfileBinary(_T("MainFrame"), _T("WP"), (LPBYTE*)&lwp, &nl))
{
m_nCmdShow = lwp->showCmd;
}
delete [] lwp;
似乎可行