窗口放置问题-什么是重新放置窗口?

时间:2018-09-14 00:38:47

标签: c++ mfc

我有一个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 -应该在其他地方吗?

1 个答案:

答案 0 :(得分:-1)

所以在我的应用程序启动中,我这样做了:

WINDOWPLACEMENT* lwp;
UINT nl;
if (AfxGetApp()->GetProfileBinary(_T("MainFrame"), _T("WP"), (LPBYTE*)&lwp, &nl))
{
    m_nCmdShow = lwp->showCmd;
}
delete [] lwp;

似乎可行