窗口放置问题 - 什么是重新定位我的窗口?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了窗口放置问题 - 什么是重新定位我的窗口?相关的知识,希望对你有一定的参考价值。
我有一个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,它会显示maxed - 但它总是最大值!我在我的CMainFrame :: OnActivate中有我的SetWindowPlacement - 它应该在其他地方吗?
答案
所以在我的App启动时我做了这个:
WINDOWPLACEMENT* lwp;
UINT nl;
if (AfxGetApp()->GetProfileBinary(_T("MainFrame"), _T("WP"), (LPBYTE*)&lwp, &nl))
{
m_nCmdShow = lwp->showCmd;
}
delete [] lwp;
它似乎工作
以上是关于窗口放置问题 - 什么是重新定位我的窗口?的主要内容,如果未能解决你的问题,请参考以下文章