2010-09-02 230 views
3

使用CWnd::ShowWindow(SW_SHOWMAXIMIZED)如预期的那样最大化我的应用程序窗口。最大化窗口恢复到全屏

但是,当单击应用程序上的恢复按钮(或双击标题栏)时,恢复的大小与最大化窗口的大小相同,这对用户来说会造成混淆。

使用这种替代代码有同样的问题:

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

我怎样才能保持默认未最大化大小恢复时。

+0

主窗口是对话框还是SDI/MDI框架? – 2010-09-03 03:16:48

+0

SDI - CMainFrame。 – 2010-09-04 17:03:35

+0

我有同样的问题。当恢复由SetWindowPlacement设置为最大化的窗口时,窗口被“恢复”到相同的最大化大小。我是MFC MDI主窗口,调用了OnCreate的SetWindowPlacement和OnClose的GetWindowPlacement。 – Dialecticus 2011-02-19 20:00:06

回答

-1

所有信息都在扩展名为.RC的文件中。我从来没有使用过最大化/恢复程序,尽管你应该在同一个窗口寻找'DIALOGEX'。您可以使用任何编辑器(记事本,ultraedit等)来更改它。

1

我解决了我的问题,并且解决方案也可能解决您的问题。我的问题是,即使我在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,这与于CWinApp :: m_nCmdShow获得的参数调用的ShowWindow时。

+0

是的这两条线为我解决了完全相同的问题,我从来没有想过要尝试。 – 2016-08-15 23:04:37