基于單文檔的MFC窗口分割_第1頁
基于單文檔的MFC窗口分割_第2頁
基于單文檔的MFC窗口分割_第3頁
基于單文檔的MFC窗口分割_第4頁
基于單文檔的MFC窗口分割_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于單文檔的窗口分割簡(jiǎn)介部分是對(duì)于MFC應(yīng)用程序的介紹,在博客上看到的,覺得受益匪淺,所以寫到這里。不需要的朋友可以從第二部分程序設(shè)計(jì)開始看起。目錄基于單文檔的窗口分割1簡(jiǎn)介3MFC應(yīng)用程序類型簡(jiǎn)介3單文檔與多視圖5單文檔多視圖程序設(shè)計(jì)6Stepl:創(chuàng)建單文檔的MFC程序6Step2:聲明相關(guān)的變量。6Step3:重載OnCreateClient()函數(shù),進(jìn)行窗口的分割7Step4:設(shè)置行列初始值9附:代碼10簡(jiǎn)介MFC應(yīng)用程序類型簡(jiǎn)介在MicrosoftVC+6.0中,基于MFC的應(yīng)用程序一般分為以下幾種:多文檔界面(MDI)單文檔界面(SDI)基于對(duì)話框的應(yīng)用程序。圖1-1應(yīng)用程序類型其中

2、單文檔又可分為單視圖的和多視圖的。品三冷:;了-/1/1士工工學(xué)工4"寫£H件如闌病視圖坦)幫助尤匚nuF.緡號(hào)©區(qū)以造圖1-3單文檔多視圖般情況下,單文檔僅需要單視圖就夠了,如Windows自帶的記事本、畫圖程序等等,但圖1-2單文檔單視圖在一些情況下,單文檔需要多視圖支持,比如同時(shí)觀察文檔的不同部分,同時(shí)從不同的角度觀察同一文檔等。在MFC的框架下,文檔對(duì)象(CDocument)有一個(gè)保存其所有視圖的列表,并提供了增加視圖(AddView)與刪除視圖(RemoveView)函數(shù),以及當(dāng)文檔內(nèi)容改變時(shí)通知其所有視圖的方法(UpdateAllViews)。類視困V

3、又宏和京量V全局函數(shù)和變星±j也CAboutDL宣tl比JCWairiFramei£lCSpli11arTtstAppS觸ft1硬殖時(shí)也CSplitier!estlfiew.±Kplitt如T式(vsd)7AidVi5CVie»tpITikksetlidCvi"Donst/iVtJidCv«id)comI*BeginVTa.i1Corsdr(vsid)."COINanb留Fuji,(3nst,AJX.GCuCIn丁(CFt網(wǎng)物nQ:1-4類視圖通過多文檔框架的窗口復(fù)制機(jī)制和單文檔框架的分割窗口機(jī)制是實(shí)現(xiàn)單文檔多視圖的主要方法

4、。單文檔與多視圖一般地,單文檔與多視圖有三種情況:1)在多文檔界面MDI中,每個(gè)視圖位于MDI的一個(gè)獨(dú)立子文檔框架中,視圖對(duì)象基于同一個(gè)視圖類。用戶可以通過窗口|新窗口”菜單,為同一文檔的視圖再創(chuàng)建一個(gè)窗口,通過新創(chuàng)建的窗口,可以編輯和觀察文檔的另一部分,同一文檔各個(gè)視圖之間自動(dòng)實(shí)現(xiàn)同步,用戶修改一個(gè)視圖的內(nèi)容,在另外的視圖中也自動(dòng)更新。MFC框架通過復(fù)制原來的子框架窗口和其中的視圖來實(shí)現(xiàn)上面的功能,并且是完全自動(dòng)的。2)視圖對(duì)象基于同一視圖類,所有視圖位于同一文檔框架中。分割窗口將單文檔窗口的視圖區(qū)分割成幾個(gè)獨(dú)立的視圖,框架從同一視圖類創(chuàng)建多個(gè)視圖對(duì)象。Word的子窗口即屬于這種類型。3)視

5、圖對(duì)象基于不同的視圖類,所有的視圖位于同一文檔框架中。多個(gè)視圖共享同一文檔框架,但從不同的視圖類創(chuàng)建,每個(gè)視圖可以為文檔提供不同的觀察和編輯方法。比如在一個(gè)窗口里觀察文檔的不同部分,或者是在一個(gè)窗口里用不用類型的視圖觀察同一個(gè)文檔。這種類型的實(shí)現(xiàn)方法是通過重載框架類CMainFrame的成員函數(shù)OnCreateClient實(shí)現(xiàn),用戶可以根據(jù)不同需要將窗口分為垂直或水平的多個(gè)分割窗口。單文檔多視圖程序設(shè)計(jì)下面通過實(shí)例設(shè)計(jì),介紹單文檔多視圖的窗口分割(上面介紹的第二種情況)Stepl:創(chuàng)建單文檔的MFC程序創(chuàng)建一個(gè)基于MFC的應(yīng)用程序,程序類型選擇“單文檔”,命名為“SplitterTest”。S

6、tep2:聲明相關(guān)的變量在MainFrm.hpublic:CSplitterWndCSplitterWndCSplitterWndCSplitterWnd中添加如下變量聲明。m_miansplitter;m_leftSplitter;m_rightSplitter;m_leftbottom;BOOLmisSplitter;3458T89C1111111122“厘性public:CSpliUtrWCSplitt4pWnlCSpliUtrWnlCSpliatrWnlBOOLm_miinspl11.七電T;m_jrihtsplittsr:OSpli11”.指示窗口是否已維迸行了分割并在CMainFr

7、ame的構(gòu)造函數(shù)中,初始化isSplitter為FALSE3=HCflainFranie構(gòu)造/析構(gòu)4- .-:1CFALSEJ;|'/TODO:在此添加成員初始化代碼1133BDfltLCMainframe:OnCreateClient(LPCKEATESTRUCTIpcm,CCreateCcmtext>pCortteirt)L14d111明116;117。L的119:12D:121|122123.12411ZS:12612T!1%129'130H131132:1.33:134.135:1前13TStep3:重載OnCreateClient()函數(shù),進(jìn)行窗口的分割Clai

8、nFrmeYCCodeClasz:il垣孑討g«t_accValu*GttActicum白a七EtActiveFranteGftinterf4c*Hook的土M電1號(hào)亳目電5iring晝tScrollBarCtriKtnJHelFIslnvokeAllowedLoadFraneQnAffibiertFropartyOrJChilNotifyOrdCcmHandClnCreitAcerelates=-zl、IJnCi'e-LtClintOnfreatedientQrJinkLRfil白u(yù)TOnNcti£y圖2-1重載OnCreateClient()函數(shù)在OnCreat

9、eClient()函數(shù)中添加如下代碼:/TOK:由1麻加專用代碼加,或調(diào)用基類療窗口的分割ifGh_ntiniplitt*r.CrftteStttie(this,1,)=-FALSE)1rtturnFALSE;if(m_le£tsplitter.CreateSutic(fiim_mainzplitter,2f1,WS_CKILCIlSjnsiBLE,m_mainspli11er.IdFroibEckCol(0,O”=FAtSE)(r&turnFALSE:)ifGrj-ightsplittar.CreittStitciniplitter,1,2,WS_CHILD|VISIBLE

10、,mmainplitierIdPrQmiEowCQl1)=FALSE)returnFALSE;)i£G«_le£tbottom.CreateStatic(fcn_J.e£tsplitter,1,2,WS_C)nLD|ltfS_VISI£LEJm_la£tspLitter.IdFronkEowCftl1,0)士士FALSEJrtturnFALSE:1m_isSplitttr-TRUE;13至HO;Bl;142iU3=l同1mU7|H«=HOF15叫isd152i153E15堵155=1SG:157150;1碼160:lei!i

11、"163=164=165!I畸ItTilesllty=J7蝴定視圖CHe.:i«Raet;tClienlRectlaeEect);ifbjeftalitterCr電虱砰i個(gè)MQRlfflT:NE_CUSSOjliLrI«tVi«lCSizetcR«tVidtlO/2.cRectH式的t/?LrJUL>I)rIrwtarRTJH5E;1litn_riztt£3ilittijCreateVisw(U.U,IUN71ME_LLASSIfSplltterl*st¥iw),CSiz<cA*clVidt±i0/4.

12、cl*ct.H*i£ht)£fCuntkGuTHiJE)fretijriiFALSE.ifa_riditspliti«rCrtit1,MJjriME_CU55(CSplittwitsCSizt(cl«tWidthORcE«vH*itfiUDXContcmt)=F+L£TI)rrci>jrnFALSE,:f5iflbvltmEmtt«Yi,電OJWnMZCLASS®5plilUiTtitVis),C重工SRrJ悔1th。/4eB*ct.KtigfU0/2).Can4altI)=FM-SI)lrILrtt'

13、;lHi.TALSI;ifQi_lafibvttwi.CrcttcVigfiQJ.HU1OM3_CLASS(CSplitt“Tv,tVi(w).CSin(cK«gkcfkcl.Hti次t0/乃.他口川ewtFfiLSE1rtt<vnTAI3T;TitJTT.rEUE這時(shí),運(yùn)行程序,會(huì)發(fā)現(xiàn)窗口已經(jīng)被分割為多視圖。但是,需要拖動(dòng)一下才顯示出來。圖2-2初步運(yùn)行結(jié)果Step4:設(shè)置行列初始值重載OnSize函數(shù)。CBainFrVCCadeCl/:41匿多司。JI州_QUERTDRJWIlffM_QUERYEKDSI:附_QUERT蛇WF式VLQUERWFEIIffM_QUERTUIS

14、TA州IBITTTO刖陽_EE再TQ刖舊;TMRBlITTOHUfffNI.REMDERAUJiffM_RENDEEFDRJJ.卷SETCUESOR州_BETFOCUSffi_SEniN(3CIUM.SHamwDOtfM_SIZEOnfiiia_SIZECITFEC.圖2-3重載OnSize函數(shù)在函數(shù)中添加如下代碼,167166317u171MN173174ITS176i176'ITE;UvoidCM&iiiFtaftognSih巨CUIHTiJ建電,mt國(guó)latcyj/71010;在此處添加消息處理程序代碼CfiectexFtan;G*tCli9n.

15、tEect(ftffrFran);ifCFrAjntd:OnSi.工電MT1yatjcy)m_mainEplitteT.SetCalumnIiifo00,crTram.WilthO/2,10);mj-eftsplitter.£RereInfo©crFram.Height10);mi_riglktsplLtier.SfttColumiilnfo(,crFrajn-Wid+hO/4.10):m_riglitsplitter.SetColumnlnfci(1/crFraju.WidthO/4.10j;m_m:a_iusp1itiLez".R.ecalclayotlItQ

16、j此時(shí),運(yùn)行結(jié)果正常。圖2-4最終運(yùn)行結(jié)果附:代碼BOOLCMainFrame:OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext)(/TODO:在此添加專用代碼和/或調(diào)用基類/窗口的分割if(m_mainsplitter.CreateStatic(this,1,2)=FALSE)(returnFALSE;if(m_leftsplitter.CreateStatic(&m_mainsplitter,2,1,WS_CHILD|WS_VISIBLE,m_mainsplitter.IdFromRowCol(0,0)=FALSE)

17、(returnFALSE;if(m_rightsplitter.CreateStatic(&m_mainsplitter,1,2,WS_CHILD|WS_VISIBLE,m_mainsplitter.IdFromRowCol(0,1)=FALSE)(一returnFALSE;)if(m_leftbottom.CreateStatic(&m_leftsplitter,1,2,WS_CHILD|WS_VISIBLE,m_leftsplitter.IdFromRowCol(1,0)=FALSE)一returnFALSE;)m_isSplitter=TRUE;/綁定視圖CRectcRe

18、ct;GetClientRect(&cRect);if(m_leftsplitter.CreateView(0,0,RUNTIME_CLASS(CSplitterTestView),CSize(cRect.Width()/2,cRect.Height()/2),pContext)=FALSE)returnFALSE;)if(m_rightsplitter.CreateView(0,0,RUNTIME_CLASS(CSplitterTestView),CSize(cRect.Width()/4,cRect.Height(),pContext)=FALSE)returnFALSE;)if(m_rightsplitter.CreateView(0,1,RUNTIME_CLASS(CSplitterTestView),CSize(cRect.Width()/4,cRect.Height(),pContext)=FALSE)returnFALSE;)if(m_leftbottom.CreateView(0,0,RUNTIME_CLASS(CSplitterTestView),CSize(cRect.Width()/4,cRec

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論