版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、mfmfc c繪圖繪圖mfc編程學(xué)習(xí)的基本目標(biāo)編程學(xué)習(xí)的基本目標(biāo)可以進(jìn)行簡單的基于可以進(jìn)行簡單的基于mfc的圖形界面編程的圖形界面編程理解理解windows編程的基本概念。編程的基本概念。鑒于教學(xué)時間進(jìn)度限制,更復(fù)雜的應(yīng)用程序開發(fā)通過鑒于教學(xué)時間進(jìn)度限制,更復(fù)雜的應(yīng)用程序開發(fā)通過自學(xué)完成。自學(xué)完成。實(shí)現(xiàn)基本實(shí)現(xiàn)基本mfc應(yīng)用程序需要掌握如下內(nèi)容:應(yīng)用程序需要掌握如下內(nèi)容:windows編程基本概念編程基本概念文檔文檔/視圖結(jié)構(gòu)視圖結(jié)構(gòu)文檔讀寫文檔讀寫對話框及標(biāo)準(zhǔn)控件的使用對話框及標(biāo)準(zhǔn)控件的使用菜單欄的使用菜單欄的使用繪圖及鼠標(biāo)消息的處理繪圖及鼠標(biāo)消息的處理1/17/20222主要內(nèi)容主要內(nèi)容g
2、di與設(shè)備環(huán)境(與設(shè)備環(huán)境(dc)用用cdc繪圖繪圖應(yīng)用舉例應(yīng)用舉例繪圖工具類繪圖工具類1/17/20223圖形設(shè)備接口(圖形設(shè)備接口(gdi)windows提供了一個稱為圖形設(shè)備接口提供了一個稱為圖形設(shè)備接口(graphics device interface,gdi)的抽象接口。的抽象接口。gdi 作為作為windows的重要組成部分,負(fù)責(zé)管理用的重要組成部分,負(fù)責(zé)管理用戶繪圖操作時功能的轉(zhuǎn)換。戶繪圖操作時功能的轉(zhuǎn)換。用戶通過調(diào)用用戶通過調(diào)用gdi 函數(shù)與設(shè)備打交道,函數(shù)與設(shè)備打交道,gdi 通過通過不同設(shè)備提供的驅(qū)動程序?qū)⒗L圖語句轉(zhuǎn)換為對應(yīng)不同設(shè)備提供的驅(qū)動程序?qū)⒗L圖語句轉(zhuǎn)換為對應(yīng)的繪圖
3、指令,避免了用戶對硬件直接進(jìn)行操作,的繪圖指令,避免了用戶對硬件直接進(jìn)行操作,從而實(shí)現(xiàn)設(shè)備無關(guān)性(顯示器或打印機(jī))。從而實(shí)現(xiàn)設(shè)備無關(guān)性(顯示器或打印機(jī))。1/17/20224gdi的圖形輸出的圖形輸出應(yīng)用程序可以使用應(yīng)用程序可以使用gdi 創(chuàng)建如下圖形輸出創(chuàng)建如下圖形輸出矢量圖形:畫線和填充圖形,包括點(diǎn)、直線、曲線、多矢量圖形:畫線和填充圖形,包括點(diǎn)、直線、曲線、多邊形、扇形和矩形等。邊形、扇形和矩形等。光柵圖形:通過光柵圖形函數(shù)對以位圖形式存儲的數(shù)據(jù)光柵圖形:通過光柵圖形函數(shù)對以位圖形式存儲的數(shù)據(jù)進(jìn)行操作,包括各種位圖和圖標(biāo)的輸出。進(jìn)行操作,包括各種位圖和圖標(biāo)的輸出。屏幕:對若干行和列的像素
4、操作屏幕:對若干行和列的像素操作打印機(jī):對若干行和列的點(diǎn)陣輸出打印機(jī):對若干行和列的點(diǎn)陣輸出直接從內(nèi)存到顯存的復(fù)制操作,速度快,內(nèi)存要求高。直接從內(nèi)存到顯存的復(fù)制操作,速度快,內(nèi)存要求高。文本:以圖形方式輸出文本,以邏輯坐標(biāo)為單位計(jì)算輸文本:以圖形方式輸出文本,以邏輯坐標(biāo)為單位計(jì)算輸出位置,而出位置,而dos是以行為單位。用戶可以設(shè)置文本的各是以行為單位。用戶可以設(shè)置文本的各種效果,如加粗、斜體、設(shè)置顏色等。種效果,如加粗、斜體、設(shè)置顏色等。1/17/20225設(shè)備環(huán)境設(shè)備環(huán)境應(yīng)用程序的輸出面向設(shè)備環(huán)境應(yīng)用程序的輸出面向設(shè)備環(huán)境(device context,dc),是,是一個虛擬邏輯設(shè)備,也
5、稱設(shè)備描述表或設(shè)備上下文。設(shè)備一個虛擬邏輯設(shè)備,也稱設(shè)備描述表或設(shè)備上下文。設(shè)備環(huán)境環(huán)境dc 是由是由gdi 創(chuàng)建,用來代表設(shè)備連接的數(shù)據(jù)結(jié)構(gòu)。創(chuàng)建,用來代表設(shè)備連接的數(shù)據(jù)結(jié)構(gòu)。dc 的主要功能的主要功能允許應(yīng)用程序使用一個輸出設(shè)備。允許應(yīng)用程序使用一個輸出設(shè)備。提供應(yīng)用程序、設(shè)備驅(qū)動和輸出設(shè)備之間的連接。提供應(yīng)用程序、設(shè)備驅(qū)動和輸出設(shè)備之間的連接。保存當(dāng)前信息,例如當(dāng)前的畫筆、畫刷、字體和位圖等圖形對象及保存當(dāng)前信息,例如當(dāng)前的畫筆、畫刷、字體和位圖等圖形對象及其屬性,以及顏色和背景等影響圖形輸出的繪圖模式。其屬性,以及顏色和背景等影響圖形輸出的繪圖模式。保存窗口剪切區(qū)域保存窗口剪切區(qū)域(c
6、lipping region),限制程序輸出到輸出設(shè)備中,限制程序輸出到輸出設(shè)備中窗口覆蓋的區(qū)域。窗口覆蓋的區(qū)域。1/17/20226設(shè)備坐標(biāo)系統(tǒng)設(shè)備坐標(biāo)系統(tǒng)設(shè)備坐標(biāo)系統(tǒng)設(shè)備坐標(biāo)系統(tǒng)x軸自左至右,軸自左至右,y軸從上到下,坐標(biāo)原點(diǎn)在屏軸從上到下,坐標(biāo)原點(diǎn)在屏幕左上角幕左上角0,0xyo1/17/20227主要內(nèi)容主要內(nèi)容gdi與設(shè)備環(huán)境(與設(shè)備環(huán)境(dc)用用cdc繪圖繪圖應(yīng)用舉例應(yīng)用舉例繪圖工具類繪圖工具類1/17/20228設(shè)備環(huán)境類設(shè)備環(huán)境類cdcmfc封裝了封裝了dc,提供,提供cdc 類及它的子類以類及它的子類以訪問訪問gdi。cdc類派生自類派生自cobject類,其子類包括類,其
7、子類包括cclientdccmetafiledccpaintdccwindowdccobject1/17/20229設(shè)備環(huán)境類的基本功能設(shè)備環(huán)境類的基本功能1/17/202210cdc類常用繪圖函數(shù)類常用繪圖函數(shù)arc:繪制一段弧:繪制一段弧chord:繪制弦形:繪制弦形ellipse:繪制橢圓或圓:繪制橢圓或圓moveto:將當(dāng)前位置移動到指定位置:將當(dāng)前位置移動到指定位置lineto:從當(dāng)前位置到指定位置畫一條直線:從當(dāng)前位置到指定位置畫一條直線polyline:畫連接指定點(diǎn)的折線段:畫連接指定點(diǎn)的折線段polybezler:根據(jù)兩個端點(diǎn)和兩個控制點(diǎn)畫貝塞爾曲線:根據(jù)兩個端點(diǎn)和兩個控制點(diǎn)畫
8、貝塞爾曲線pie:畫冰塊:畫冰塊polygon:根據(jù)兩個或兩個以上的頂點(diǎn)繪制一個多邊形:根據(jù)兩個或兩個以上的頂點(diǎn)繪制一個多邊形rectangle:根據(jù)指定的左上角和右下角坐標(biāo)繪制一個矩形:根據(jù)指定的左上角和右下角坐標(biāo)繪制一個矩形roundrect:畫圓角矩形:畫圓角矩形setpixel:畫一個點(diǎn):畫一個點(diǎn)1/17/202211繪圖顏色繪圖顏色dword類型的類型的colorref數(shù)據(jù)用于存放顏色值數(shù)據(jù)用于存放顏色值“0 x00bbggrr”低位字節(jié)存放紅色強(qiáng)度值低位字節(jié)存放紅色強(qiáng)度值第第2 個字節(jié)存放綠色強(qiáng)度值個字節(jié)存放綠色強(qiáng)度值第第3個字節(jié)存放藍(lán)色強(qiáng)度值個字節(jié)存放藍(lán)色強(qiáng)度值高位字節(jié)存放高位字
9、節(jié)存放0可用可用rgb宏設(shè)置顏色值,將紅、綠、藍(lán)分量值轉(zhuǎn)宏設(shè)置顏色值,將紅、綠、藍(lán)分量值轉(zhuǎn)換為換為colorref類型的顏色數(shù)據(jù)類型的顏色數(shù)據(jù)colorref rgb(byte byred, / red component of color byte bygreen, / green component of colorbyte byblue / blue component of color );1/17/202212常用顏色對照表常用顏色對照表例:例:collorref red = rgb(255,0,0);1/17/202213在在mfc中獲取中獲取dc在如在如ondraw等函數(shù)中傳遞一
10、個指向等函數(shù)中傳遞一個指向cdc 對象的對象的指針指針如如ondraw(cdc* pdc);使用構(gòu)造函數(shù)構(gòu)建對象使用構(gòu)造函數(shù)構(gòu)建對象一般不構(gòu)造一般不構(gòu)造cdc對象對象在在cwnd類的類的onpaint函數(shù)中,定義函數(shù)中,定義cpaintdc對象對象cpaintdc dc(this);在在cwnd類的其它函數(shù)中,定義類的其它函數(shù)中,定義cclientdc和和cwindowdc的對象的對象cclientdc dc(this);cwindowdc dc(this);1/17/202214cclientdc、cpaintdc和和cwindowdc的區(qū)別的區(qū)別當(dāng)窗口的某個區(qū)域需要重繪時激發(fā)窗口重繪消息當(dāng)
11、窗口的某個區(qū)域需要重繪時激發(fā)窗口重繪消息wm_paint,相應(yīng)消息,相應(yīng)消息處理函數(shù)處理函數(shù)cwnd:onpaint將被調(diào)用。將被調(diào)用。cpaintdc一般只用于一般只用于onpaint函數(shù)函數(shù)中,在處理完窗口重繪后,中,在處理完窗口重繪后, cpaintdc對象的析構(gòu)函數(shù)把對象的析構(gòu)函數(shù)把wm_paint消消息從消息隊(duì)列中清除,避免不斷地重繪操作。坐標(biāo)原點(diǎn)息從消息隊(duì)列中清除,避免不斷地重繪操作。坐標(biāo)原點(diǎn)(0,0)是客戶區(qū)的是客戶區(qū)的左上角。左上角。cclientdc用于特定窗口客戶區(qū)(窗口中除邊框、標(biāo)題欄、菜單欄、狀用于特定窗口客戶區(qū)(窗口中除邊框、標(biāo)題欄、菜單欄、狀態(tài)欄外的中間部分)的輸出
12、,其構(gòu)造函數(shù)中包含了態(tài)欄外的中間部分)的輸出,其構(gòu)造函數(shù)中包含了getdc,析構(gòu)函數(shù)中包析構(gòu)函數(shù)中包含了含了releasedc,不需要顯式釋放,不需要顯式釋放dc資源。一般用于響應(yīng)非重繪消息資源。一般用于響應(yīng)非重繪消息(如鍵盤和鼠標(biāo)消息)的繪圖操作。坐標(biāo)原點(diǎn)(如鍵盤和鼠標(biāo)消息)的繪圖操作。坐標(biāo)原點(diǎn)(0,0)是客戶區(qū)的左上角。是客戶區(qū)的左上角。cwindowdc在整個應(yīng)用程序窗口上畫圖,而在整個應(yīng)用程序窗口上畫圖,而cclientdc和和cpaintdc只只能在客戶區(qū)繪制圖形;除非要自己繪制窗口邊框和按鈕,否則一般不用能在客戶區(qū)繪制圖形;除非要自己繪制窗口邊框和按鈕,否則一般不用它。坐標(biāo)原點(diǎn)它。
13、坐標(biāo)原點(diǎn)(0,0)是屏幕的左上角。是屏幕的左上角。1/17/202215windows系統(tǒng)系統(tǒng)發(fā)送發(fā)送wm_paint消息的時機(jī)消息的時機(jī)第一次創(chuàng)建一個窗口時第一次創(chuàng)建一個窗口時改變窗口的大小時改變窗口的大小時把窗口從另一個窗口背后移出時把窗口從另一個窗口背后移出時窗口顯示數(shù)據(jù)變化時,應(yīng)用程序引發(fā)重繪操作窗口顯示數(shù)據(jù)變化時,應(yīng)用程序引發(fā)重繪操作通過通過cwnd:invalidate、cwnd:invalidaterect或或cwnd:invalidatergn函數(shù)把指定區(qū)域加到窗口的函數(shù)把指定區(qū)域加到窗口的update region中。中。窗口的窗口的update region不為空時,系統(tǒng)會
14、自動產(chǎn)生不為空時,系統(tǒng)會自動產(chǎn)生wm_paint消息。消息。1/17/202216ondraw與與onpaint的區(qū)別的區(qū)別ondraw是是cview類的成員函數(shù),不響應(yīng)消息;類的成員函數(shù),不響應(yīng)消息;onpaint是是cwnd類的成員函數(shù),相應(yīng)類的成員函數(shù),相應(yīng)wm_paint消息。消息。cview默認(rèn)調(diào)用的默認(rèn)調(diào)用的onpaint函數(shù)如下函數(shù)如下void cview:onpaint() cpaintdc dc(this); onpreparedc(&dc); ondraw(&dc); /調(diào)用了調(diào)用了ondraw可見可見onpaint函數(shù)也調(diào)用了函數(shù)也調(diào)用了cview:ond
15、raw函數(shù)。因而一函數(shù)。因而一般在般在ondraw函數(shù)內(nèi)添加繪圖代碼,完成繪圖任務(wù)函數(shù)內(nèi)添加繪圖代碼,完成繪圖任務(wù)1/17/202217主要內(nèi)容主要內(nèi)容gdi與設(shè)備環(huán)境(與設(shè)備環(huán)境(dc)用用cdc繪圖繪圖應(yīng)用舉例應(yīng)用舉例繪圖工具類繪圖工具類1/17/202218舉例舉例編寫一個單文檔編寫一個單文檔mfc應(yīng)用程序,完成以下要求:應(yīng)用程序,完成以下要求:(1)在客戶區(qū)中畫最大的橢圓,()在客戶區(qū)中畫最大的橢圓,(2)當(dāng)點(diǎn)擊鼠)當(dāng)點(diǎn)擊鼠標(biāo)左鍵時,以鼠標(biāo)左鍵點(diǎn)擊的位置為中心,畫一標(biāo)左鍵時,以鼠標(biāo)左鍵點(diǎn)擊的位置為中心,畫一個半徑為個半徑為20個像素的圓。個像素的圓。建立一個單文檔的建立一個單文檔的mf
16、c項(xiàng)目項(xiàng)目drawtest11/17/202219繪制橢圓方法一:修改繪制橢圓方法一:修改cview類的虛函數(shù)類的虛函數(shù)ondraw函數(shù)函數(shù)cwnd:getclientrect得到客戶區(qū)域的大小得到客戶區(qū)域的大小添加繪圖代碼添加繪圖代碼1/17/202220繪制橢圓方法二:在繪制橢圓方法二:在onpaint函數(shù)中添加繪圖函數(shù)中添加繪圖代碼代碼添加添加wm_paint消息處理函數(shù)消息處理函數(shù)onpaint調(diào)用調(diào)用onpreparedc和和ondraw函數(shù),添加繪圖代碼函數(shù),添加繪圖代碼需要添加需要添加的代碼的代碼1/17/2022211/17/202222鼠標(biāo)點(diǎn)擊消息處理函數(shù)鼠標(biāo)點(diǎn)擊消息處理函數(shù)
17、在類視圖中選中在類視圖中選中cdrawtest1view類類在屬性窗口中選擇在屬性窗口中選擇“wm_lbuttondown”消息,添加消息處理函數(shù)消息,添加消息處理函數(shù)需要添加需要添加的代碼的代碼1/17/2022231/17/202224主要內(nèi)容主要內(nèi)容gdi與設(shè)備環(huán)境(與設(shè)備環(huán)境(dc)用用cdc繪圖繪圖應(yīng)用舉例應(yīng)用舉例繪圖工具類繪圖工具類1/17/202225繪圖工具類主要包括繪圖工具類主要包括畫筆畫筆cpencpen、畫刷、畫刷cbrushcbrush、字體、字體cfontcfont、位圖、位圖bitmapbitmap和調(diào)色板和調(diào)色板cpalettecpalette等。等。類繼承關(guān)系如
18、圖類繼承關(guān)系如圖cobject繪圖工具類繪圖工具類cgdiobject1/17/202226cpen類:類:gdi 畫筆,用于畫線。默認(rèn)的畫筆用于繪制畫筆,用于畫線。默認(rèn)的畫筆用于繪制與一個像素等寬的黑色實(shí)線。與一個像素等寬的黑色實(shí)線。cbrush類:類:gdi 畫刷,用來填充一個封閉圖形對象畫刷,用來填充一個封閉圖形對象(如如矩形、圓形矩形、圓形)的內(nèi)部區(qū)域,默認(rèn)的畫刷顏色是白色。的內(nèi)部區(qū)域,默認(rèn)的畫刷顏色是白色。cfont類:類:gdi字體,用來繪制文本,可設(shè)置文字的大字體,用來繪制文本,可設(shè)置文字的大小、是否加粗、是否斜體、是否加下劃線等。小、是否加粗、是否斜體、是否加下劃線等。cbit
19、map類:類:gdi 位圖,用于填充區(qū)域。位圖,用于填充區(qū)域。cpalette類:類:gdi 調(diào)色板,包含系統(tǒng)可用的色彩信息,調(diào)色板,包含系統(tǒng)可用的色彩信息,是應(yīng)用程序和彩色輸出設(shè)備環(huán)境是應(yīng)用程序和彩色輸出設(shè)備環(huán)境(如顯示器如顯示器)的接口。的接口。crgn類:類:gdi 區(qū)域,用于設(shè)備環(huán)境區(qū)域,用于設(shè)備環(huán)境(通常是窗口通常是窗口)內(nèi)的內(nèi)的區(qū)域操作,通常和區(qū)域操作,通常和cdc類中與裁剪類中與裁剪(clipping)有關(guān)的成有關(guān)的成員函數(shù)配合使用。員函數(shù)配合使用。1/17/202227陰影畫刷陰影畫刷bool cbrush:createhatchbrush( int nindex, / 指定陰影樣式指定陰影樣式colorref crcolor / 指定陰影顏色指定陰影顏色);創(chuàng)建一個黃色的實(shí)心畫刷創(chuàng)建一個黃色的實(shí)心畫刷cbrush brush;brush.createhatchbrush(hs_diagcross, rgb(255,255,0);1/17/202228在在ondraw函數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四年級上冊語文教學(xué)計(jì)劃集合7篇
- 我的大學(xué)讀后感-15篇
- 《貓城記》讀書筆記個人書評
- 醫(yī)學(xué)生自我介紹范文集合四篇
- 冠心病二級預(yù)防他汀治療的理想與現(xiàn)實(shí)-血脂回顧和展望
- 淺析建筑物區(qū)分所有權(quán)制度
- 教師年度總結(jié)范文5篇
- 健身徒步旅行合同
- 2025年放射性核素遠(yuǎn)距離治療機(jī)合作協(xié)議書
- 餐館租賃合同范本
- 幼兒園幼兒食品安全培訓(xùn)
- 中建八局一公司新員工手冊
- 食品科學(xué)與工程生涯發(fā)展展示
- WB原理流程課件
- 設(shè)備管理的設(shè)備績效績效指標(biāo)和評價體系
- 智能安防智慧監(jiān)控智慧管理
- 中心學(xué)校2023-2024學(xué)年度六年級英語質(zhì)量分析
- 2024年甘肅蘭州生物制品研究所有限責(zé)任公司招聘筆試參考題庫附帶答案詳解
- 保單檢視報告活動策劃
- 《學(xué)前教育研究方法》課件
- 室外消火栓安裝工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
評論
0/150
提交評論