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