資源描述:
《第6章+章框架窗口、文檔和視圖》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、第6章框架窗口、文檔和視圖盡管窗口、文檔和視圖是MFC的基礎(chǔ),但可能也是最不易理解的部分,因?yàn)槠涓拍钚员葌鹘y(tǒng)編程所需的WindowsAPI函數(shù)更強(qiáng)一些6.1框架窗口框架窗口可分為兩類:一類是應(yīng)用程序主窗口,另一類是文檔窗口。6.1.1主窗口和文檔窗口主框架窗口是應(yīng)用程序直接放置在桌面(DeskTop)上的那個(gè)窗口,每個(gè)應(yīng)用程序只能有一個(gè)主框架窗口,主框架窗口的標(biāo)題欄上往往顯示應(yīng)用程序的名稱。6.1.1主窗口和文檔窗口文檔窗口對(duì)于單文檔應(yīng)用程序來說,它和主框架窗口是一致的,即主框架窗口就是文檔窗口;
2、而對(duì)于多文檔應(yīng)用程序,文檔窗口是主框架窗口的子窗口,如圖6.1所示。文檔窗口主框架窗口6.1.2窗口風(fēng)格的設(shè)置窗口風(fēng)格既可以通過MFCAppWizard來設(shè)置,也可以在主窗口或文檔窗口類的PreCreateWindow函數(shù)中修改CREATESTRUCT結(jié)構(gòu),或是可以調(diào)用CWnd類的成員函數(shù)ModifyStyle和ModifyStyleEx來更改。1.窗口風(fēng)格窗口風(fēng)格通常有一般(以WS_為前綴)和擴(kuò)展(以WS_EX_為前綴)兩種形式。這兩種形式的窗口風(fēng)格可在函數(shù)CWnd::Create或CWnd::
3、CreateEx參數(shù)中指定,其中CreateEx函數(shù)可同時(shí)支持以上兩種風(fēng)格,而CWnd::Create只能指定窗口的一般風(fēng)格。需要說明的是,對(duì)于控件和對(duì)話框這樣的窗口來說,它們的窗口風(fēng)格可直接通過其屬性對(duì)話框來設(shè)置。常見的一般窗口風(fēng)格如表6.1所示。1.窗口風(fēng)格表6.1窗口的一般風(fēng)格6.1.2窗口風(fēng)格的設(shè)置2.用MFCAppWizard設(shè)置MFCAppWizard有一個(gè)[高級(jí)]按扭(在創(chuàng)建單文檔或多文檔應(yīng)用程序過程的第四步中),允許用戶指定有關(guān)SDI和MDI框架窗口的屬性,圖6.2表示了Advan
4、cedOptions對(duì)話框的WindowStyles頁(yè)面,其中的選項(xiàng)含義見表6.2。但在該對(duì)話框中,用戶只能設(shè)定少數(shù)幾種窗口風(fēng)格。圖6.2高級(jí)選項(xiàng)對(duì)話框表6.2高級(jí)選項(xiàng)對(duì)話框窗口風(fēng)格的各項(xiàng)含義6.1.2窗口風(fēng)格的設(shè)置3.修改CREATESTRUCT結(jié)構(gòu)當(dāng)窗口創(chuàng)建之前,系統(tǒng)自動(dòng)調(diào)用PreCreateWindow虛函數(shù)。在用MFCAppWizard創(chuàng)建文檔應(yīng)用程序結(jié)構(gòu)時(shí),MFC已為主窗口或文檔窗口類自動(dòng)重載了該虛函數(shù)。用戶可以在此函數(shù)中通過修改CREATESTRUCT結(jié)構(gòu)來設(shè)置窗口的絕大多數(shù)風(fēng)格。例如
5、,在單文檔應(yīng)用程序中,框架窗口默認(rèn)的風(fēng)格是WS_OVERLAPPEDWINDOW和FWS_ADDTOTITLE的組合,更改其風(fēng)格可如下列的代碼:BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs){//新窗口不帶有[最大化]按鈕cs.style&=~WS_MAXIMIZEBOX;//將窗口的大小設(shè)為1/3屏幕并居中cs.cy=::GetSystemMetrics(SM_CYSCREEN)/3;cs.cx=::GetSystemMetrics(SM_CXS
6、CREEN)/3;cs.y=((cs.cy*3)-cs.cy)/2;cs.x=((cs.cx*3)-cs.cx)/2;returnCFrameWnd::PreCreateWindow(cs);}代碼中,前面有“::”作用域符號(hào)的函數(shù)是指全局函數(shù),一般都是一些API函數(shù)?!癱s.style&=~WS_MAXIMIZEBOX;”中的“~”是按位取“反”運(yùn)算符,它將WS_MAXIMIZEBOX的值按位取反后,再和cs.style值按位“與”,其結(jié)果是將cs.style值中的WS_MAXIMIZEBOX標(biāo)
7、志位清零。6.1.2窗口風(fēng)格的設(shè)置4.使用ModifyStyle和ModifyStyleExCWnd類中的成員函數(shù)ModifyStyle和ModifyStyleEx也可用來更改窗口的風(fēng)格,其中ModifyStyleEx還可更改窗口的擴(kuò)展風(fēng)格。這兩個(gè)函數(shù)具有相同的參數(shù),其含義如下。BOOLModifyXXXX(DWORDdwRemove,DWORDdwAdd,UINTnFlags=0);其中,參數(shù)dwRemove用來指定需要?jiǎng)h除的風(fēng)格,dwAdd用來指定需要增加的風(fēng)格,nFlags表示SetWind
8、owPos的標(biāo)志,0(默認(rèn))表示更改風(fēng)格的同時(shí)不調(diào)用SetWindowPos函數(shù)。由于框架窗口在創(chuàng)建時(shí)不能直接設(shè)定其擴(kuò)展風(fēng)格,因此只能通過調(diào)用ModifyStyle函數(shù)來進(jìn)行。例如用MFCClassWizard為一個(gè)多文檔應(yīng)用程序Ex_MDI的子文檔窗口類CChildFrame添加OnCreateClient消息處理,并增加下列代碼:BOOLCChildFrame::OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext)