資源描述:
《第7章 框架窗口、文檔和視圖》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第7章框架窗口、文檔和視圖第7章框架窗口、文檔和視圖7.1框架窗口7.2文檔及其序列化7.3視圖及視圖類7.4文檔視圖結(jié)構(gòu)7.1框架窗口7.1.1主窗口和文檔窗口主窗口是應(yīng)用程序直接放置在桌面上的那個窗口,每個應(yīng)用程序只能有一個主窗口,主窗口的標(biāo)題欄上往往顯示應(yīng)用程序的名稱。文檔窗口對于SDI程序來說,它和主窗口是一致的,即主窗口就是文檔窗口;而對于MDI程序,文檔窗口是主窗口的子窗口,如圖。文檔窗口一般都有相應(yīng)的可見邊框,它的客戶區(qū)是由相應(yīng)的視圖來構(gòu)成的,因此可以說視圖是文檔窗口內(nèi)的子窗口。文檔
2、窗口時刻跟蹤當(dāng)前處于活動狀態(tài)的視圖的變化,并將用戶或系統(tǒng)產(chǎn)生的命令消息傳遞給當(dāng)前活動視圖。而主窗口負責(zé)管理各個用戶交互對象并根據(jù)用戶操作相應(yīng)地創(chuàng)建或更新文檔窗口及其視圖。7.1框架窗口7.1.2窗口風(fēng)格的設(shè)置??窗口風(fēng)格窗口風(fēng)格通常有一般和擴展兩種形式。這兩種形式的窗口風(fēng)格可在函數(shù)CWnd::Create或CWnd::CreateEx參數(shù)中指定,CreateEx函數(shù)可同時支持以上兩種風(fēng)格,而CWnd::Create只能指定窗口的一般風(fēng)格。需要說明的是,對于控件和對話框這樣的窗口來說,它們的窗口風(fēng)格
3、可直接通過其屬性對話框來設(shè)置。需要說明的是,除了上述風(fēng)格外,框架窗口還有以下三個自己的風(fēng)格。它們都可以在PreCreateWindow重載函數(shù)中指定。uFWS_ADDTOTITLE該風(fēng)格指定相關(guān)的信息如文檔名添加到框架窗口標(biāo)題的后面。uFWS_PREFIXTITLE該風(fēng)格使得框架窗口標(biāo)題中的文檔名顯示在應(yīng)用程序名之前。uFWS_SNAPTOBARS該風(fēng)格用來調(diào)整窗口的大小,使它剛好包含了框架窗口中的控制欄。7.1框架窗口??用MFCAppWizard設(shè)置7.1框架窗口??修改CREATESTRUC
4、T結(jié)構(gòu)窗口創(chuàng)建之前,系統(tǒng)自動調(diào)用PreCreateWindow虛函數(shù)。在用MFCAppWizard創(chuàng)建SDI/MDI應(yīng)用程序結(jié)構(gòu)時,MFC已為主窗口或文檔窗口類自動重載了該虛函數(shù)??梢栽诖撕瘮?shù)中通過修改CREATESTRUCT結(jié)構(gòu)來設(shè)置窗口的絕大多數(shù)風(fēng)格。例如,在SDI程序中,框架窗口默認(rèn)的風(fēng)格是WS_OVERLAPPEDWINDOW和FWS_ADDTOTITLE的組合,更改風(fēng)格代碼:BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs){//新窗口不帶有
5、[最大化]按鈕cs.style&=~WS_MAXIMIZEBOX;//將窗口的大小設(shè)為1/3屏幕并居中cs.cy=::GetSystemMetrics(SM_CYSCREEN)/3;cs.cx=::GetSystemMetrics(SM_CXSCREEN)/3;cs.y=((cs.cy*3)-cs.cy)/2;cs.x=((cs.cx*3)-cs.cx)/2;//調(diào)用基類的PreCreateWindow函數(shù)returnCFrameWnd::PreCreateWindow(cs);}對于MDI程序,
6、文檔窗口的風(fēng)格可用下列的代碼更改:BOOLCChildFrame::PreCreateWindow(CREATESTRUCT&cs){//創(chuàng)建不含有[最大化]按鈕的子窗口cs.style&=~WS_MAXIMIZEBOX;//調(diào)用基類的PreCreateWindow函數(shù)returnCMDIChildWnd::PreCreateWindow(cs);}7.1框架窗口??使用ModifyStyle和ModifyStyleExCWnd類中的成員函數(shù)ModifyStyle和ModifyStyleEx也可用
7、來更改窗口的風(fēng)格,其中ModifyStyleEx還可更改窗口的擴展風(fēng)格。這兩個函數(shù)具有相同的參數(shù),其含義如下。BOOLModifyXXXX(DWORDdwRemove,DWORDdwAdd,UINTnFlags=0);參數(shù)dwRemove用來指定需要刪除的風(fēng)格,dwAdd用來指定需要增加的風(fēng)格,nFlags表示SetWindowPos的標(biāo)志,0(默認(rèn))表示更改風(fēng)格的同時不調(diào)用SetWindowPos函數(shù)。由于框架窗口在創(chuàng)建時不能直接設(shè)定其擴展風(fēng)格,因此只能通過調(diào)用ModifyStyle函數(shù)來進行。
8、7.1框架窗口[例Ex_Vscroll]多文檔(MDI)的子文檔窗口增加垂直滾動條。(1)用MFCAppWizard創(chuàng)建一個多文檔應(yīng)用程序。(2)用ClassWizard為子文檔窗口類CChildFrame添加OnCreateClient消息處理,并增加下列代碼:BOOLCChildFrame::OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext){ModifyStyle(0,WS_VSCROLL,0);returnC