首页 > 解决方案 > 窗口放置问题 - 什么是重新定位我的窗口?

问题描述

我有一个 C++/MFC 应用程序,我试图保存和恢复我的 CFrameWnd 派生的主框架的窗口位置。我在适当的地方调用了GetWindowPlacementSetWindowPlacement,一切似乎都运行良好。

直到我“存储”窗口最大化时。在这种情况下,当我重新打开应用程序并使用调试器跳过我的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 - 它应该在其他地方吗?

标签: c++mfc

解决方案


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

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

它似乎工作


推荐阅读