Mfc 最大化窗口恢复到全屏

Mfc 最大化窗口恢复到全屏,mfc,maximize,cwnd,maximize-window,showwindow,Mfc,Maximize,Cwnd,Maximize Window,Showwindow,使用CWnd::ShowWindow(SW\u SHOWMAXIMIZED)按预期最大化我的应用程序窗口 CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { ... // Obtain wndpl, maybe from registry AfxGetApp()->m_nCmdShow = wndpl.showCmd; wndpl.showCmd = SW_SHOW; SetWindowPlac

使用
CWnd::ShowWindow(SW\u SHOWMAXIMIZED)
按预期最大化我的应用程序窗口

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ...
    // Obtain wndpl, maybe from registry
    AfxGetApp()->m_nCmdShow = wndpl.showCmd;
    wndpl.showCmd = SW_SHOW;
    SetWindowPlacement(&wndpl);
}
但是,当单击应用程序上的还原按钮(或双击标题栏)时,还原的大小与最大化窗口的大小相同,这让用户感到困惑

使用此替代代码存在相同的问题:

WINDOWPLACEMENT wndpl;
GetWindowPlacement(&wndpl);
wndpl.showCmd = SW_SHOWMAXIMIZED;
SetWindowPlacement(&wndpl);

恢复时如何保持默认的未最大化大小。

所有信息都在扩展名为.RC的文件中。我从未使用过最大化/还原过程,尽管您应该为同一窗口查找“DIALOGEX”。您可以使用任何编辑器(记事本、ultraedit等)更改它。

我已经解决了我的问题,解决方案也可能解决您的问题。我的问题是,尽管我在CMainFrame::OnCreate中调用了SetWindowPlacement(&wndpl),但如果窗口被最大化,则无法正确恢复。我在SetWindowPlacement之前添加了两行代码,现在它可以正常工作了

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ...
    // Obtain wndpl, maybe from registry
    AfxGetApp()->m_nCmdShow = wndpl.showCmd;
    wndpl.showCmd = SW_SHOW;
    SetWindowPlacement(&wndpl);
}

这两行代码有助于底层代码在调用ActivateFrame时避免混乱,ActivateFrame使用从CWinApp::m_nCmdShow获得的参数调用ShowWindow。

主窗口是对话框还是SDI/MDI框架?我也有同样的问题。还原由SetWindowPlacement设置为最大化的窗口时,窗口将“还原”为相同的最大化大小。我的是MFC MDI主窗口,从OnCreate调用SetWindowPlacement,从OnClose调用GetWindowPlacement。是的,这两行代码为我解决了完全相同的问题,我从来没有想到会这样做。