2010-09-02 179 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