第8章MFC概述_第1頁(yè)
第8章MFC概述_第2頁(yè)
第8章MFC概述_第3頁(yè)
第8章MFC概述_第4頁(yè)
第8章MFC概述_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、MFC程序框架簡(jiǎn)介核心框架類層次結(jié)構(gòu)CObject是大多數(shù)是大多數(shù)MFC類的根類或基類。類的根類或基類。CObject類有很多有用類有很多有用的特性:的特性:對(duì)運(yùn)行時(shí)類對(duì)運(yùn)行時(shí)類信息的支持信息的支持,對(duì)動(dòng)態(tài)對(duì)動(dòng)態(tài)創(chuàng)建的支持創(chuàng)建的支持,對(duì)串行對(duì)串行化的支持化的支持,對(duì)象診斷,對(duì)象診斷輸出,等等。輸出,等等。核心框架類層次結(jié)構(gòu)CCmdTarget:消息消息映映射體系的一個(gè)基類射體系的一個(gè)基類,是是MFC處理命令消息處理命令消息的基礎(chǔ)、核心。的基礎(chǔ)、核心。WM_COMMAND的源的源頭頭。派生自它,派生自它, 類別類別才能夠處理命令消息才能夠處理命令消息WM_COMMAND。核心框架類層次結(jié)構(gòu)CWi

2、nThread:代表:代表MFC 程序中的一個(gè)程序中的一個(gè)執(zhí)行執(zhí)行線程。線程。CWinApp:代表:代表整整個(gè)個(gè)MFC 應(yīng)用程序。應(yīng)用程序。它代替它代替WinMain,負(fù)責(zé)程序的初始化,負(fù)責(zé)程序的初始化,消息循環(huán)。消息循環(huán)。核心框架類層次結(jié)構(gòu)類類Cwnd代替代替Win32 SDK中中的窗口的窗口函數(shù),負(fù)責(zé)消息函數(shù),負(fù)責(zé)消息的處理,生成菜單欄,的處理,生成菜單欄,工具欄,標(biāo)題欄,負(fù)責(zé)工具欄,標(biāo)題欄,負(fù)責(zé)處理數(shù)據(jù),負(fù)責(zé)結(jié)果的處理數(shù)據(jù),負(fù)責(zé)結(jié)果的顯示等。顯示等。核心框架類層次結(jié)構(gòu)所有所有窗口,不論是主框窗口,不論是主框窗口、子框窗口、對(duì)話窗口、子框窗口、對(duì)話框、控制組件、框、控制組件、view 視視

3、窗,都有一個(gè)對(duì)應(yīng)的窗,都有一個(gè)對(duì)應(yīng)的C+ 類別,你可以想象窗類別,你可以想象窗口口handle和和C+ 對(duì)象對(duì)象結(jié)盟。這些結(jié)盟。這些C+ 類別統(tǒng)統(tǒng)類別統(tǒng)統(tǒng)衍生自衍生自CWnd,也就是說(shuō),也就是說(shuō),凡衍生自凡衍生自CWnd 之類別才之類別才能收到能收到WM_ 窗口消息窗口消息(WM_COMMAND 除除外)。外)。核心框架類層次結(jié)構(gòu)CView類負(fù)責(zé)類負(fù)責(zé)將文件內(nèi)容將文件內(nèi)容呈現(xiàn)到顯示裝置上:也呈現(xiàn)到顯示裝置上:也許是屏幕,也許是打印許是屏幕,也許是打印機(jī)。機(jī)。文件內(nèi)容的呈現(xiàn)由文件內(nèi)容的呈現(xiàn)由虛擬函數(shù)虛擬函數(shù)OnDraw 負(fù)責(zé)。負(fù)責(zé)。由于這個(gè)類別實(shí)際上就由于這個(gè)類別實(shí)際上就是你在屏幕上所看到的是你

4、在屏幕上所看到的窗口(外再罩一個(gè)外框窗口(外再罩一個(gè)外框窗口),所以它也窗口),所以它也負(fù)責(zé)負(fù)責(zé)使用者輸入的第一線服使用者輸入的第一線服務(wù)務(wù)。核心框架類層次結(jié)構(gòu)CDocument類:負(fù)責(zé)類:負(fù)責(zé)數(shù)據(jù)數(shù)據(jù)的處理。當(dāng)你為自己的的處理。當(dāng)你為自己的程序由程序由CDocument 衍生衍生出一個(gè)子類別后,出一個(gè)子類別后,應(yīng)該應(yīng)該在其中加上成員變量,在其中加上成員變量,以容納文件資料;并加以容納文件資料;并加上成員函數(shù),負(fù)責(zé)修改上成員函數(shù),負(fù)責(zé)修改文件內(nèi)容以及讀寫檔。文件內(nèi)容以及讀寫檔。讀寫文件由虛擬函數(shù)讀寫文件由虛擬函數(shù)Serialize 負(fù)責(zé)負(fù)責(zé)。主干框架類之間關(guān)系主干框架類之間關(guān)系 CView與與

5、CDocumentclass CView CDocument* m_pDocument; CDocument* GetDocument() const; friend class CDocument; friend class CFrameWnd; friend class CMDIFrameWnd; friend class CMDIChildWnd; friend class CSplitterWnd; 主干框架類之間關(guān)系 CDocument類與類與CView類類class CDocument CPtrList m_viewList; / list of views void AddVie

6、w(CView* pView); void RemoveView(CView* pView); virtual POSITION GetFirstViewPosition() const; virtual CView* GetNextView(POSITION& rPosition) const; / Update Views (simple update - DAG only) void UpdateAllViews(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL);主干框架類之間關(guān)系 CFrameWnd類與類與CDo

7、cument類,類,CView類類class CFrameWnd virtual CDocument* GetActiveDocument(); CView* GetActiveView() const; void SetActiveView(CView* pViewNew, BOOL bNotify = TRUE);CDCCDCCDC類包含了各種類型的類包含了各種類型的WindowsWindows設(shè)備描述表的全設(shè)備描述表的全部功能,封裝了所有的部功能,封裝了所有的Win32Win32GDIGDI函數(shù)和設(shè)備描述函數(shù)和設(shè)備描述表相關(guān)的表相關(guān)的SDKSDK函數(shù)。在函數(shù)。在MFCMFC下,使用下,使

8、用CDCCDC的成員函數(shù)的成員函數(shù)來(lái)完成所有的窗口繪制,及繪圖工作來(lái)完成所有的窗口繪制,及繪圖工作。CDC類(設(shè)備上下文類,設(shè)備描述表)類(設(shè)備上下文類,設(shè)備描述表)CDC在在windowswindows中,中,GDIGDI提供了很多關(guān)于圖形操作的提供了很多關(guān)于圖形操作的APIAPI函數(shù),它為函數(shù),它為windowswindows提供圖形繪制功能,而提供圖形繪制功能,而DCDC提供提供抽象層的設(shè)備,應(yīng)用程序通過(guò)抽象層的設(shè)備,應(yīng)用程序通過(guò)DCDC操作物理設(shè)備。操作物理設(shè)備。MFCMFC的的CDCCDC類封裝了類封裝了GDIGDI和和DCDC,于是,于是GDIGDI函數(shù)就成了函數(shù)就成了CDCCDC

9、的方法。的方法。CDC類(設(shè)備上下文類,設(shè)備描述表)類(設(shè)備上下文類,設(shè)備描述表)CDCCDCCDC類操控圖形大體分兩類,一類是類操控圖形大體分兩類,一類是“畫畫畫畫兒兒”,另一個(gè)是,另一個(gè)是“貼圖貼圖”。前者好比你拿著畫筆、。前者好比你拿著畫筆、畫刷自己描線、涂染料,后者則是用現(xiàn)成的畫兒畫刷自己描線、涂染料,后者則是用現(xiàn)成的畫兒通過(guò)貼、拼來(lái)完成畫作。通過(guò)貼、拼來(lái)完成畫作。CDC1 1、作畫之前需要準(zhǔn)備好畫布、畫筆、調(diào)色板等。當(dāng)、作畫之前需要準(zhǔn)備好畫布、畫筆、調(diào)色板等。當(dāng)使用使用GDIGDI函數(shù)如函數(shù)如MoveToEx/LineTo, TextOutMoveToEx/LineTo, TextO

10、ut時(shí),只是時(shí),只是告訴系統(tǒng)要?jiǎng)澗€或?qū)懽至?,但用什么樣的筆(告訴系統(tǒng)要?jiǎng)澗€或?qū)懽至?,但用什么樣的筆(HPENHPEN),),字是什么顏色字是什么顏色(SetTextColor)(SetTextColor),畫在哪張,畫在哪張“紙紙”(HBITMAP)”(HBITMAP)上上, ,需要從一個(gè)由系統(tǒng)定義的數(shù)據(jù)結(jié)需要從一個(gè)由系統(tǒng)定義的數(shù)據(jù)結(jié)構(gòu)中去讀取構(gòu)中去讀取, ,這個(gè)數(shù)據(jù)結(jié)構(gòu)被稱為這個(gè)數(shù)據(jù)結(jié)構(gòu)被稱為Device Device Context(DC)Context(DC)。 換句話說(shuō),換句話說(shuō),GDIGDI函數(shù)只是繪畫的動(dòng)作函數(shù)只是繪畫的動(dòng)作,而而DCDC則保存了繪畫所需的材料和工具則保存了繪畫所需

11、的材料和工具。CDC2 2、設(shè)備環(huán)境函數(shù)(、設(shè)備環(huán)境函數(shù)(Device ContextDevice Context)設(shè)備環(huán)境是一個(gè)結(jié)構(gòu),)設(shè)備環(huán)境是一個(gè)結(jié)構(gòu),它定義了一系列圖形對(duì)象及其相關(guān)的屬性,以及會(huì)影響輸它定義了一系列圖形對(duì)象及其相關(guān)的屬性,以及會(huì)影響輸出結(jié)果的繪圖方式。這些圖形對(duì)象包括:畫筆(用于畫直出結(jié)果的繪圖方式。這些圖形對(duì)象包括:畫筆(用于畫直線),筆線),筆 刷(用于繪圖和填充),位圖(用于屏幕的拷貝刷(用于繪圖和填充),位圖(用于屏幕的拷貝或滾動(dòng)),調(diào)色板(用于定義可用的顏色集),剪裁區(qū)或滾動(dòng)),調(diào)色板(用于定義可用的顏色集),剪裁區(qū)(用于剪裁和其他操作),路徑(用于繪圖和畫圖

12、操作)。(用于剪裁和其他操作),路徑(用于繪圖和畫圖操作)。設(shè)設(shè) 備環(huán)境函數(shù)用于對(duì)設(shè)備環(huán)境進(jìn)行創(chuàng)建、刪除或獲取信息。備環(huán)境函數(shù)用于對(duì)設(shè)備環(huán)境進(jìn)行創(chuàng)建、刪除或獲取信息。表表2-2 設(shè)備描述表的結(jié)構(gòu)設(shè)備描述表的結(jié)構(gòu)屬性屬性缺省值缺省值BackgroundcolorBackgroundcolorsettingfromWindowsControlPanel(typically,white)BackgroundmodeOPAQUEBitmapNoneBrushWHITE_BRUSHBrushorigin(0,0)ClippingregionEntirewindoworclientareawiththeu

13、pdateregionclipped,asappropriate.Childandpop-upwindowsintheclientareamayalsobeclippedPaletteDEFAULT_PALETTECurrentpenposition(0,0)DeviceoriginUpperleftcornerofthewindowortheclientareaDrawingmodeR2_COPYPENFontSYSTEM_FONT(SYSTEM_FIXED_FONTforapplicationswrittentorunwithWindowsversions3.0andearlier)CDC

14、Intercharacterspacing 0MappingmodeMM_TEXTPenBLACK_PENPolygon-fillmodeALTERNATEStretchmodeBLACKONWHITETextcolorTextcolorsettingfromControlPanel(typically,black)Viewportextent(1,1)Viewportorigin(0,0)Windowextent(1,1)Windoworigin(0,0)設(shè)備描述表設(shè)備描述表CDC CDCCDC繪圖的方法繪圖的方法設(shè)備描述表配合繪圖函數(shù),也即設(shè)備描述表配合繪圖函數(shù),也即DCDC配合配合GDI

15、GDI函數(shù)。函數(shù)。繪圖的具體步驟繪圖的具體步驟(1)(1)獲取或者創(chuàng)建設(shè)備描述表;獲取或者創(chuàng)建設(shè)備描述表; (2)(2)必要的話,改變?cè)O(shè)備描述表的屬性;必要的話,改變?cè)O(shè)備描述表的屬性; (3)(3)使用設(shè)備描述表完成繪制操作;使用設(shè)備描述表完成繪制操作; (4)(4)釋放或刪除設(shè)備描述表。釋放或刪除設(shè)備描述表。CDC DC的種類的種類CClientDC 代表操作窗口的DC ,是比較常用的一個(gè)子類.CMetaFileDC 響應(yīng)Meta File的DC ,Meta File是一些GDI命令, 用來(lái)創(chuàng)建需要的圖像或文本。 CPaintDC 響應(yīng)WM_PAINT消息的DC。CWindowDC 代表整個(gè)

16、屏幕的DC。CClientDC:(客戶區(qū)設(shè)備上下文):(客戶區(qū)設(shè)備上下文)用于客戶區(qū)的輸出用于客戶區(qū)的輸出,與,與特定窗口關(guān)聯(lián),可以讓開(kāi)發(fā)者訪問(wèn)目標(biāo)窗口中客戶區(qū),特定窗口關(guān)聯(lián),可以讓開(kāi)發(fā)者訪問(wèn)目標(biāo)窗口中客戶區(qū),其其構(gòu)造函數(shù)中包含了構(gòu)造函數(shù)中包含了GetDC,析構(gòu)函數(shù)中包含了,析構(gòu)函數(shù)中包含了ReleaseDC。CPaintDC:用于響應(yīng)窗口重繪消息(用于響應(yīng)窗口重繪消息(WM_PAINT)時(shí)的繪)時(shí)的繪圖輸出圖輸出。CPaintDC在構(gòu)造函數(shù)中調(diào)用在構(gòu)造函數(shù)中調(diào)用BeginPaint()取得設(shè)備取得設(shè)備上下文,上下文, 在析構(gòu)函數(shù)中調(diào)用在析構(gòu)函數(shù)中調(diào)用EndPaint()釋放設(shè)備上下文釋放設(shè)備

17、上下文。EndPaint()除了釋放設(shè)備上下文外,還除了釋放設(shè)備上下文外,還負(fù)責(zé)從消息隊(duì)列中負(fù)責(zé)從消息隊(duì)列中清除清除WM_PAINT消息消息。因此,。因此, 在處理窗口重畫時(shí),必須使在處理窗口重畫時(shí),必須使用用CPaintDC,否則,否則WM_PAINT消息無(wú)法從消息隊(duì)列中清除,消息無(wú)法從消息隊(duì)列中清除,將引起不斷的窗口重畫。將引起不斷的窗口重畫。CPaintDC也只能用在也只能用在 WM_PAINT消息處理之中消息處理之中。幾種幾種DC及區(qū)別及區(qū)別CWindowDC:關(guān)聯(lián)一特定窗口,:關(guān)聯(lián)一特定窗口,允許開(kāi)發(fā)者在目標(biāo)窗口允許開(kāi)發(fā)者在目標(biāo)窗口的任何一部分進(jìn)行繪圖,包含邊界與標(biāo)題的任何一部分進(jìn)行

18、繪圖,包含邊界與標(biāo)題,這種,這種DC同同WM_NCPAINT消息一起發(fā)送。消息一起發(fā)送。幾種幾種DC及區(qū)別及區(qū)別幾種幾種DC及區(qū)別及區(qū)別CWindowDC與與CClientDC,CPaintDC的區(qū)別的區(qū)別:CWindowDC可在非客戶區(qū)繪制圖形,而CClientDC,CPaintDC只能在客戶區(qū)繪制圖形。CWindowDC下坐標(biāo)原點(diǎn)是在屏幕的左上角,CClientDC,CPaintDC下坐標(biāo)原點(diǎn)是在客戶區(qū)的左上角。CClientDC與與CPaintDC的區(qū)別:的區(qū)別:CPaintDC的對(duì)象一般用在OnPaint內(nèi)以響應(yīng)Windows消息WM_PAINT,自動(dòng)完成繪制,在整個(gè)窗口內(nèi)進(jìn)行重畫,維持原有窗口完整性。CClien

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論