VC文檔程序啓動時窗口最大化問題

常用MFC進行編程的人都知道單文檔的編程,在編程過程中發現欲使程序在啓動時就能最大化顯示,這裏的處理方法有多種,但是結果卻不一樣。

首先大家最常用的就是在View類的PreCreateWindow函數中,修改窗口類型cs的值,也就是或上一個“最大化”即:cs.style |= WS_MAXIMIZE; 

其次用得比較多的是:在app文件的InitInstance函數中修改ShowWindow函數的實參,即改 

m_pMainWnd->ShowWindow(SW_SHOW);

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

這兩種方法都可以達到最大化的目的,但是你會發現,當程序運行時,窗口有一個從普通窗口到最大化窗口的過程,看起來很醜,這是窗口的重畫造成的。

那麼解決這個問題的辦法就是:在窗口重畫前,讓第一個窗口不要顯示出來,直接顯示第二個窗口,也就是最大化窗口,經過跟蹤程序運行,發現在app類的InitInstance函數中有如下代碼(AppWizard自動生成):

// Parse command line for standard shell commands, DDE, file open
 CCommandLineInfo cmdInfo;
 ParseCommandLine(cmdInfo);

  // Dispatch commands specified on the command line
 if (!ProcessShellCommand(cmdInfo))
  return FALSE;

// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
 m_pMainWnd->UpdateWindow();

通常我們改的就是上面的倒數第二行代碼,那麼也就是在這行代碼之前程序已經產生了一個窗口。於是在這個窗口產生前,把它“消滅”掉豈不正好。

繼續跟蹤,發現也就是上面提到的代碼中的ProcessShellCommand(cmdInfo)這一句代碼在搞鬼,所以可做如下修改:

1.在  ProcessShellCommand(cmdInfo)之前,加一句m_nCmdShow = SW_SHOWMAXIMIZED;

2.把m_pMainWnd->ShowWindow(SW_SHOW);修改爲m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

這樣窗口一下子就最大化,不會再有原來的問題了!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章