1. 程式人生 > >MFC單文件視窗最大化顯示

MFC單文件視窗最大化顯示

實現的方法主要有三種:

      1.過載CMainFrame::ActivateFrame(int nCmdShow)

      2.令nCmdShow=SW_SHOWMAXIMIZED

      3.CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);

 實現方法的原理:

      MFC單文件程式預設執行時視窗最大化,其實這是在修改MFC的視窗介面的外觀,修改MFC視窗的外觀或是風格  要用到類風格(CS_XXXX)和視窗風格(WS_XXXX),學過MFC的學者都知道在WinMain函式中,最開始都定義了WNDCLASS視窗類,該類可以改變視窗的圖示,背景,游標等;

      若要改變視窗的大小,一般在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中修改構造類cs的值,可以修改cs的cx,cy來改變大小;如果要最大化,就要修改cs.style|=WS_MAXIMIZE 使主框架類(CMainFrame)最大化,自然檢視類(CView)建立時也會跟隨主框架類(CMainFrame)而變化,但是此時顯示時,仍然是沒有變化,因為MFC主框架類(CMainFrame)的最後顯示要通過SW_XXXX引數來決定,一些朋友就建議在CXXApp::InitInstance()中的m_pMainWnd->ShowWindow(SW_SHOW);前加入m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);或直接改掉,其實最終效果可以實現,但執行開始時會出現先是正常的小視窗,然後馬上變成最大化,給人的視覺效果明顯不好!

       之所以會產生這種效果,是因為在m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);呼叫之前會先呼叫 CMainFrame::ActivateFrame(int nCmdShow);此時便會根據nCmdShow(預設為SW_SHOWNORMAL)呼叫顯示視窗一次,SW_SHOWNORMAL會根據cs中的cx,cy,x,y來顯示視窗,當再次呼叫m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);會形成視覺暫留!

       最終解決辦法如上所述!