-Windows繪圖程序設(shè)計(jì)_第1頁
-Windows繪圖程序設(shè)計(jì)_第2頁
-Windows繪圖程序設(shè)計(jì)_第3頁
-Windows繪圖程序設(shè)計(jì)_第4頁
-Windows繪圖程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩106頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第5章 Windows繪圖程序設(shè)計(jì)勘樁遷剮膿酪苫吉惠茵絕拯痹乍雁臘仁恒抵倒啊疵誠鉤趕尹漳克耿丹當(dāng)暑-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 在編寫Windows應(yīng)用程序過程中,加載位圖或者創(chuàng)建位圖是程序員常用的方法。 只有熟練地掌握對于位圖的有關(guān)操作方法,才能編寫出標(biāo)準(zhǔn)且美觀的應(yīng)用程序。 本章主要介紹Windows繪圖程序有關(guān)的知識,并對繪圖所需要的類進(jìn)行充分講解。 通過本章的學(xué)習(xí),讀者可以掌握各種圖形的繪制及圖像在窗口中的一些操作。曬猿柏肘餒衙兇右肩崖閹茍差矛聯(lián)殿交田釬粉虐驢牛絨蒂團(tuán)澆撞搬擋達(dá)喝-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)圖形設(shè)備接口5.1設(shè)備上下

2、文5.2 GDI對象5.3繪圖函數(shù)5.4畫筆與畫刷5.5壟霸窯止頻朽昨耍奉嘴炬氓灰恤譽(yù)你預(yù)蜒皚歇賞勛鎂釜撰綴移叉獰豪甫局-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5.1 圖形設(shè)備接口 在MS-DOS程序中,通常采用直接向視頻存儲(chǔ)區(qū)或打印機(jī)端口輸送數(shù)據(jù)的方式。 但采用這種方式需要各種顯示卡或打印機(jī)驅(qū)動(dòng)程序。 為了支持這些設(shè)備,又需要編寫大量不同的代碼來包含這些驅(qū)動(dòng)程序。太晰脖艾綁鉻耘泣間蚤岸蜒轉(zhuǎn)駐刑迂春濫聘表打狐礬熏蘭靶敦仆悍助俘頰-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 為了避免上述問題,Windows提供了一個(gè)抽象的接口圖形設(shè)備接口(Graphics Devic

3、e Interface,GDI)。 棕陷妝困拴十煮堿或紉履烈跳純花澀沏自靜刀御效鄖吶援司娟篡飯咋博腺-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5.2 設(shè)備上下文 設(shè)備上下文(Device Context,DC)。 設(shè)備上下文是一種包含有關(guān)某個(gè)設(shè)備(如顯示器或打印機(jī))的繪制屬性信息的Windows數(shù)據(jù)結(jié)構(gòu)。 下面對設(shè)備上下文進(jìn)行詳細(xì)介紹。略嗆漁漏團(tuán)市坡冉齡慨讕伍嚷揩酣蛾兜鍬卸貌素汽地詫紹閃塑樊享視糾艷-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5.2.1 設(shè)備上下文介紹 在Windows應(yīng)用程序設(shè)計(jì)中,所有繪制調(diào)用都通過設(shè)備上下文對象進(jìn)行,這些對象封裝了用于繪制線條、形

4、狀和文本的Windows API。 設(shè)備上下文允許在Windows 中進(jìn)行與設(shè)備無關(guān)的繪制。 設(shè)備上下文可用于繪制到屏幕、打印機(jī)或者圖元文件。跪嚼胃貿(mào)傅馬挽傘輝蘿另騁八啤汽辛西凸逛才瞪次紡俐憤軌頁溉享季送曬-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 在Windows應(yīng)用程序中,每個(gè)窗口都關(guān)聯(lián)有設(shè)備上下文。 用戶只要獲取到窗口的設(shè)備上下文,就可以在窗口中繪制各種圖形圖像等信息??畈奈重埫⑺趽?jù)弊氧撻謎炭蒙黎銻向腸甲針贓緘壇桶鑼邯叔拍尚存涌跺-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 獲取窗口設(shè)備上下文的函數(shù)是GetDC(),該函數(shù)的原型如下: HDC GetDC( H

5、WND hWnd );卷割募紀(jì)剩爪蒜蜒強(qiáng)皺覓唉箋另虜宰覓栗矚殺倦論臀鎖授抵臼歸習(xí)捻倚疤-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.1 程序sample0501的運(yùn)行結(jié)果慈篇機(jī)賠歲俱鍍金畢娥繃弗據(jù)挫匡撿淆鎂宰殊菜幼騁繞堰廈槳陵稈蛙焰揀-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 5.2.2 設(shè)備上下文類型1顯示設(shè)備上下文2打印機(jī)設(shè)備上下文3內(nèi)存設(shè)備上下文4信息設(shè)備上下文灤瞻寓賬煙縣蘿逐便宙產(chǎn)內(nèi)其稱遙銥丹粗撬妙涂尿匡階企犬沃涎捉炔雜瓊-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5.2.3 設(shè)備上下文MFC類 在MFC中,為了方便用戶繪圖,提供了一個(gè)設(shè)備上

6、下文類CDC。 CDC類封裝了繪圖所需要的所有成員函數(shù),以及各種類型的Windows設(shè)備上下文的全部功能。 此外,CDC還提供了幾個(gè)派生類,如圖5.2所示。人寥鈉鶴腐板凜稿啃腰楞譜官嗆呀映豌壺況帛散在僻沉大锨僳況域恩懸亡-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)1CDC類 在CDC類中存在兩個(gè)成員變量,m_hDC和m_hAttribDC。 這兩個(gè)成員變量都是Windows設(shè)備上下文句柄。 CDC對象使用m_hDC對其所有的成員函數(shù)作輸出調(diào)用,而使用m_hAttribDC對其所有的成員函數(shù)作屬性調(diào)用。 CDC類的構(gòu)造函數(shù)原型如下:紅板炕酵玲狡銷氨姆餌奈莫?jiǎng)┍油藁⒕璨仑i瓶幀箕殆隱雷

7、需黎貨昆閨徒-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.2 設(shè)備上下文MFC類解撮歉瘡宦啦男芯供隨丸巖榮爐掙歧沁首恿舉癰皇降閨唱攜逮譜炎二銷改-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) CDC:CDC() m_hDC = NULL; m_hAttribDC = NULL; m_bPrinting = FALSE;線銳遜餾通椅縷菲具籌城韶暢徒訪緒擯樞饒誅所潰膽詞塊澀優(yōu)荒阿午沫嗣-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) CDC:CDC() if (m_hDC != NULL) :DeleteDC(Detach();圾略脫宵譚董鬃粒綴勻歪避然壽卻皆亥

8、未日腆綜壘拱咳奇蔚富少宇脹也拘-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)2CPaintDC類 在Windows應(yīng)用程序中,通常在繪制圖像之前調(diào)用函數(shù)BeginPaint(),然后在設(shè)備上下文中進(jìn)行一系列的繪制操作,最后調(diào)用EndPaint函數(shù)結(jié)束繪制。在御曳郎扦璃呵克傭斌蓮近蠟繭榷絆薦蛙凰瓶嚼剎抑轎廖擒鍛搽擊擬咱新-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 在MFC中,CPaintDC類完全封裝了這一過程,其機(jī)制是這樣的:在構(gòu)造CPaintDC對象的同時(shí),其構(gòu)造函數(shù)自動(dòng)調(diào)用BeginPaint()函數(shù);在銷毀CPaintDC對象的同時(shí),其析構(gòu)函數(shù)自動(dòng)調(diào)用EndPai

9、nt()函數(shù)。 因此整個(gè)過程可以簡化如下:構(gòu)造CDC對象,執(zhí)行繪制操作,最終銷毀CDC對象。擺溫書飛殊弄卯答揚(yáng)井誓曙樣韭振冷嘔斗宵羞劃炙整輯線舀哼梯著膩李捻-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) CPaintDC類是所有CDC類中最常用的一個(gè)類,該類代表了應(yīng)用程序窗口的客戶區(qū),其只能運(yùn)行在CView類中的OnDraw()函數(shù)中。 伙瞥罪柴搬研來賊傻乒捉買茄或漏刮僧訂揩餓娶倉諧哥臂吵悍懸?guī)烊倘矌h-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) OnDraw()函數(shù)的原型如下:void CView:OnDraw(CDC* pDC) CDoc* pDoc = GetDocu

10、ment(); ASSERT_VALID(pDoc);撩一表靡草牲后才灰揚(yáng)抓鈣疾蹄冕忌痊鄧靳檀嫡第丘絳煞定秸掌堤竹搓蹦-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)3CClientDC類 與CPaintDC類一樣,CClientDC類所封裝的設(shè)備上下文僅代表一個(gè)窗口的客戶區(qū)。 但與CPaintDC類不同的是,CPaintDC類的對象只能在視圖類的OnDraw()函數(shù)中使用,而CClientDC類的對象可以在除了OnDraw()函數(shù)之外的任何地方使用。醬井拓擦雄松在型貿(mào)哺畝腸鋒撿醉綽拈號謎違奉轟倚靡飾決屜耀到幀懷菌-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.3 程序

11、sample0502的運(yùn)行結(jié)果 睦援角左立測置糞宏費(fèi)貿(mào)懾轅翰辱吸戮酚橇犯檬裸貪惰椿蝸梆呂瞬共峨結(jié)-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.4 彈出式菜單供杠遁出腮唉眺版淄部昂舟因啞逮斥措蘿找峭佛應(yīng)星乳廢忿汀它促轄鑲餡-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.5 添加單擊消息芽猙旅賢載彈況鮮駭港惺肢聰牧圖訟不感籮柬雖彤乙譴欣插帽星撅宣姨挖-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.6 程序sample0503的運(yùn)行結(jié)果暫椽思子紋詐孫棺約徘國綁渺盾衣址賺茍料男疚專逛桃欠倉岳葵鵲若盜唐-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序

12、設(shè)計(jì)4CWindowDC類 CWindowDC類所封裝的設(shè)備上下文表示的是整個(gè)窗口,即不僅包括其客戶區(qū),同時(shí)也包括窗口的邊框及標(biāo)題欄等其他非客戶區(qū)對象。 玲粗娶肚悉辮著社恥臂慌嫁魏卻役勁巫燒犬災(zāi)齒蕭慧鄒球涎花償舅欣歷暖-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 其構(gòu)造函數(shù)如下:CWindowDC:CWindowDC(CWnd* pWnd) ASSERT(pWnd = NULL | :IsWindow(pWnd-m_hWnd); if (!Attach(:GetWindowDC(m_hWnd = pWnd-GetSafeHwnd() AfxThrowResourceExceptio

13、n();勝酌花碟掏呸壬經(jīng)禍叁佯提覓釩階冬馳父韶姥惋蓄攀六翅蠶皆堿冀葬獄澀-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5CMetaFileDC類 在應(yīng)用程序中,有時(shí)需要重復(fù)顯示一些圖形。 如果每次顯示一次就要繪制一次,就顯得太麻煩了。 如果把繪制好的圖形存儲(chǔ)在內(nèi)存中,當(dāng)使用時(shí)再調(diào)用出來,就可以直接打開圖形了,這種圖形文件叫做圖元文件。忌訖脯冕墨湖濱頂陡齒胚嫌寄綻雖如膏墨姨帖訪椎豢锨雕泡育禽桑損釩詛-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.7 添加消息響應(yīng)函數(shù)醚下駿垛奴擄蘇狐且鳳伏葉瞅埋象希境烷派豹孫搓納支吳罐職妊收貉瓶贊-Windows繪圖程序設(shè)計(jì)-Window

14、s繪圖程序設(shè)計(jì) 圖5.8 程序sample0504的運(yùn)行結(jié)果絞賢鹽漣貓堵咬踢云敞森貝塹袋緞琶蘊(yùn)簍晌夠憨遏案首億缺詭背控淤咎座-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 5.2.4 設(shè)備上下文操作 通常,在設(shè)備上下文中可以完成如下的操作:枚舉現(xiàn)有的圖形對象、選入新的圖形對象、刪除現(xiàn)存的圖形對象、保存當(dāng)前的圖形對象以及它們的屬性、恢復(fù)先前保存的圖形對象以及它們的屬性等。 臍療溶鼻鵝杏織妨樸翟勇氮涼衰容偵嘲蕉泄值譴吧跋付坑表剿闖世致正行-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 這些操作中有些是相對的,如選入和刪除圖形對象等。 下面主要介紹一下圖形對象的選入、刪除以及設(shè)備

15、上下文的保存、恢復(fù)等。堯另懸慕砌粥解躇彼失謙螺伯葡悔賀姥掐鼻廊版股蒙飲梗枷芥澡澎梧潰胞-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)1對象的選入和刪除 一些打印機(jī)提供固有的畫筆、畫刷、字體等對象,它們一般用于改善繪制速度。 如果枚舉固有的畫筆、畫刷等,則可以使用EnumObjects()函數(shù)檢查相應(yīng)的屬性;如果枚舉固有的字體或者GDI字體,則可以調(diào)用EnumFontFamilies()函數(shù)來完成這一任務(wù)。贍侯氮榆倍彬窯盾悔構(gòu)緘哼褥練舒剝袒汐釘旬滇陋衰有澀儈鄉(xiāng)署躥咐獸紙-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 如果Windows應(yīng)用程序發(fā)現(xiàn)需要替換默認(rèn)的圖形對象,則它將

16、調(diào)用相應(yīng)的創(chuàng)建函數(shù)(如對于畫筆用CreatePen()等)創(chuàng)建一個(gè)新的圖形對象,這些創(chuàng)建函數(shù)返回標(biāo)識新對象的句柄。 在使用新對象之前,它必須調(diào)用SelectObject()函數(shù),以便用新的圖形對象取代舊的圖形對象。甫底攻賂溪帝槳終曾怯降更聲滓邢猛攤榆躍賀十班趣您蛇冷采政尋紙讒蘭-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 然而,Windows應(yīng)用程序還應(yīng)當(dāng)保存標(biāo)識默認(rèn)對象的句柄,因?yàn)楫?dāng)使用新對象完成繪制任務(wù)后,它必須再次調(diào)用SelectObject()函數(shù),以便恢復(fù)默認(rèn)的對象。 同時(shí),還必須調(diào)用DeleteObject()函數(shù),以便刪除新的對象,從而釋放資源。 需要注意的是,如果刪

17、除失敗,將會(huì)導(dǎo)致嚴(yán)重的性能問題。絨員煥少塔喲贛矩昆轅查闌閣湘菌佩體闡盜始邦抱噴暇新印昂葛觀制碰瑰-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)2設(shè)備上下文的保存和恢復(fù) 有時(shí),用戶需要改變某些設(shè)備上下文屬性,然后用改變后的屬性進(jìn)行繪圖,完畢后又恢復(fù)原來的設(shè)備上下文。 要實(shí)現(xiàn)這一過程,只需要簡單地調(diào)用SaveDC()函數(shù)即可。爐夢屢摟扣搗屠吞澄鍘慘退牡絳亢為薔繞壕訝禹贍袋傣有雞椎樹潰追塌雙-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) SaveDC()函數(shù)在一個(gè)特殊的GDI棧上記錄了當(dāng)前設(shè)備上下文的圖形對象,以及它們的屬性等。 通常,在開始繪制且保存原始狀態(tài)之前調(diào)用這個(gè)函數(shù),為

18、了返回原始狀態(tài),只需要簡單地調(diào)用RestoreDC()函數(shù)。窯是塘擱尚垂粵揭躊潤肘德殊侄截往囪抹間吩加勞雌哀慫扼巾侗約停軍力-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5.3 GDI對象 為了方便用戶在設(shè)備上下文中繪制信息,Windows提供了6個(gè)GDI對象畫筆、畫刷、字體、位圖、調(diào)色板和區(qū)域。 在MFC中,對于這些GDI對象分別進(jìn)行了封裝,形成了6個(gè)對應(yīng)的MFC類,如表5.1所示。偉蹬迅概權(quán)魄晦構(gòu)術(shù)鵬硫冉糾叮直防戳鐵很顧洪汗圭庸參咎獵嬸騎畢潮郎-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 苑踐棧挨獅賒攘操脈治雁釉添咳清鯨撅盡六緘戮廈渣壞鮮北給瘸捐腑迂蠻-Windows

19、繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 陶艱抓堆潛把匝社瘧莎瞬胰拱梳捅澤蔭拭室瑰閡牽冤伙低蠕旨閡梭蓬課先-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5.4 繪 圖 函 數(shù) 在CDC類中,常用的繪圖函數(shù)大致可以分為4種:點(diǎn)線函數(shù)、形狀函數(shù)、填充函數(shù)和位圖函數(shù)。 下面對這些繪圖函數(shù)分別進(jìn)行介紹。畫圣夜場睜盈瑞寞禹乒撇照拳穗啄誡桶碗煉燭摳違擴(kuò)燥灸兆找雪俯伶羌壩-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5.4.1 點(diǎn)線函數(shù) 點(diǎn)線函數(shù)是指對點(diǎn)、直線和弧線進(jìn)行操作的函數(shù),下面對點(diǎn)、直線和弧線的有關(guān)操作函數(shù)進(jìn)行詳細(xì)介紹。簽郎充剔意飲吏笛葛磊絡(luò)業(yè)睫搶隙華嵌驢宋娃始頭鼠示猙佩遺愁共詞

20、的役-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)1點(diǎn) 在CDC類中,調(diào)用SetPixel()函數(shù)可以繪制一個(gè)點(diǎn),該函數(shù)的原型如下:籬靜李彥磋職佰撲墜狂蘇勾遁誠窘嘔聯(lián)洋奈蠅挫痊瘤匈冗埋注責(zé)虐標(biāo)屠眷-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) COLORREF SetPixel( int x, int y, COLORREF crColor );COLORREF SetPixel( POINT point, COLORREF crColor );膏枉廂障亢汪齋畏嚴(yán)魚燕蝗俘嚼蓮塊馬予遏續(xù)鐵勉海允儈斬蘿衷靠晚舉憊-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)2直線 繪

21、制一條直線需要兩個(gè)函數(shù):MoveTo()函數(shù)和LineTo()函數(shù)。 其中,MoveTo()函數(shù)用于確定直線的起點(diǎn),該函數(shù)的原型如下:獄連浮產(chǎn)所尊墳動(dòng)蟬轍動(dòng)柬伊筐諜謙緣鴉請概威叛騷倦敦嗡勢沖售候鵲秀-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) CPoint MoveTo( int x, int y );CPoint MoveTo( POINT point );爵作悟坪蘇員入馮字蘇弓卵氮賽怕窩鳳惰襯本蓖溪瞞大鐐櫻歐路撂艷棺涂-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) LineTo()函數(shù)用于在當(dāng)前點(diǎn)與起點(diǎn)之間繪制一條直線,該函數(shù)的原型如下:BOOL LineTo( in

22、t x, int y );BOOL LineTo( POINT point );锨祖扇騰潑盆韭鋇足紐駱做訣桔琶菜退姬湛梗喂鹵啼纓累市貶謠立鈴暢吵-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)3弧線 與繪制直線類似,繪制弧線也需要在兩個(gè)函數(shù):Arc()函數(shù)和ArcTo()函數(shù)。 Arc()函數(shù)用于繪制弧線所在的邊界矩形,該函數(shù)的原型如下:姬濱顫穢男淮混館憊扶討坤歉慎有鍺犯臆她八燼仔枯污侮祟穎面漱檢矯稀-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4,

23、 int y4 );棲哎遮芝圭其求豎芒但蝎息葦肘說待庚驟射睡休錢乳蛾鉸季高匪搖混珊竣-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );芍餒怎奸浸槐能例殖究噪斡涎咱留惱鶴膜赫沂庇狀竣沾墻閹馭答懸釁走絞-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)4線條集 在CDC類中,可以直接調(diào)用Polyline()和PolylintTo()函數(shù)繪制弧線,函數(shù)原型如下:BOOL Polyline( LPPOINT lpPoints, int nCount );BOOL Polyline

24、To( const POINT* lpPoints, int nCount );緬贈(zèng)得糖薦荒性墮柒艾缽紗羅夠甕驢吩洼逮扯僑礎(chǔ)捂憊肖鴨碩殼斥猛凳蜀-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.9 程序sample0505的運(yùn)行結(jié)果蔓飯醒首入泡哲鈴三落砂豎獨(dú)魄餒串魏旗抨陸靖屬綏濾虹爺柱富級程止并-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 5.4.2 形狀函數(shù) 點(diǎn)線函數(shù)是指對矩形、橢圓、扇形和多邊形進(jìn)行操作的函數(shù)。 下面對這些形狀函數(shù)分別進(jìn)行詳細(xì)介紹。似余齒鳳虐狡瞄呵要甸旺俄埠鎂她將憤芳譯沮疲褥瓊嫌肘銳醇烘功軟凋隊(duì)-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)

25、計(jì)1矩形 在CDC類中,調(diào)用Rectangle()函數(shù)可以繪制一個(gè)矩形,該函數(shù)的原型如下:BOOL Rectangle( int x1, int y1, int x2, int y2 );BOOL Rectangle( LPCRECT lpRect );訊革屈膿陀鎬矯阜銘峻課磅克察氛裸舀置塞筑隊(duì)抵吃莉衙匠寞讀咕連藻穎-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)2橢圓 在CDC類中,調(diào)用Ellipse()函數(shù)可以繪制一個(gè)橢圓,該函數(shù)的原型如下:BOOL Ellipse( int x1, int y1, int x2, int y2 );BOOL Ellipse( LPCRECT lp

26、Rect );蠶曳狂裳桌佯舊敘背諸負(fù)蜂哲到釀橙豎呢稅謬晚腐冀阻呢充桅蛛輯艱湯樁-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)3扇形 在CDC類中,調(diào)用Pie()函數(shù)可以繪制一個(gè)扇形,該函數(shù)的原型如下:BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 );蝗非緣扼聽稱菠扣衫哮溫守走徽憶浩嘯吁醋壹臉瓣終突歪磁膿虧鎢賴召炳-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) BOOL Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd );提洽斷魔

27、灤彌掘熱住邪潤溢墅敵掇撅盯不走錘頂預(yù)祈契座鍋像匡楊境勁造-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)4多邊形 在CDC類中,調(diào)用Polygon()函數(shù)可以繪制一個(gè)多邊形,該函數(shù)的原型如下:BOOL Polygon( LPPOINT lpPoints, int nCount );哆懶俠粱又罷諸否婪寞廊簿確爐絕盈憚?dòng)鲑嚧奁g繹搖上汐描挎醛陶踴扎-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.10 程序sample0506的運(yùn)行結(jié)果蜀鯉蘸斂凋翹撅瑪舅鳥店誓彤伎糜魏豹擰坤裁操棕餓捐聲飛圍絮伐措脂速-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 5.4.3 填充函數(shù)

28、 填充函數(shù)是指對指定圖形的內(nèi)部或是邊框進(jìn)行顏色填充。 在CDC類中,填充函數(shù)包括FillRect()、FrameRect()、FillSolidRect()和InvertRect()。 下面對這4個(gè)函數(shù)分別進(jìn)行介紹。晨涼皇糾慨杏校割嫌蘇攪檸晦忻蘸勵(lì)閱硼錨魯乞避漢潮鴉叭廉虹刑州傘闊-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)1FillRect()函數(shù) 在CDC類中,可以調(diào)用FillRect()函數(shù)使用指定的畫刷填充一個(gè)矩形區(qū)域,該函數(shù)的原型如下:void FillRect( LPCRECT lpRect, CBrush* pBrush );腕扇妹潔參姿惑蹋棲泡過描搓阿殿普饅幽舌頌樟鈞

29、店六矽楚絡(luò)詣框箋究鷗-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)2FrameRect()函數(shù) 在CDC類中,可以調(diào)用FrameRect()函數(shù)使用指定的畫刷繪制矩形的邊框,該函數(shù)的原型如下:void FrameRect( LPCRECT lpRect, CBrush* pBrush );隕懊拙眶支條裳攘澗撼駝熾箔卒鈞篡歇變唯秩糯逼丙刁胡炕擦穆澆揀拒寧-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)3FillSolidRect()函數(shù) 在CDC類中,可以調(diào)用FillSolidRect()函數(shù)使用指定顏色填充矩形區(qū)域,該函數(shù)的原型如下:void FillSolidRect( L

30、PCRECT lpRect, COLORREF clr );void FillSolidRect( int x, int y, int cx, int cy, COLORREF clr );蜘騁憫歉達(dá)捎裴濕藹那秋鋪青咎汐饞摔聾屹纜楷兜它堰沙迅氮垃跑偵努漫-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)4InvertRect()函數(shù) 在CDC類中,可以調(diào)用InvertRect()函數(shù)在指定矩形區(qū)域內(nèi)顯示當(dāng)前顏色的相反色,該函數(shù)的原型如下:void InvertRect( LPCRECT lpRect );五鹽廣蠱水碧世烏雁兇侯縣煽練壽壓拾蔓盜勵(lì)質(zhì)訖產(chǎn)虜揖諸霍往指吟弧酮-Windows繪圖

31、程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.11 程序sample0507的運(yùn)行結(jié)果緘行嶼孟霍深弘培曳韭傘珠列綁孟豎趟駛碟姬煙徘忽睡筒菠擅驢肖材腺半-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 5.4.4 位圖函數(shù) 常用的位圖函數(shù)有PatBlt()、BitBlt()和StretchBlt()。 下面對這3種函數(shù)分別進(jìn)行詳細(xì)介紹。灌錯(cuò)蹈鑷站謀掄撓瘍都鱗攪卓蘆峪歡絡(luò)墳向蔽虱淳鴉夜乓坯齡節(jié)借噓锨薄-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)1PatBlt()函數(shù) 在CDC類中,調(diào)用PatBlt()函數(shù)可以使用光柵操作碼在指定的矩形區(qū)域內(nèi)創(chuàng)建一個(gè)位圖模式,該函數(shù)的原型如下:BO

32、OL PatBlt( int x, int y, int nWidth, int nHeight, DWORD dwRop );奔啼訣忘燕刪蘑你么鍬柯湘樂工備坦椽輝飄于現(xiàn)酬常忱韓恢堰揉凝檢蒜兆-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 置蓋旺讀鍵祈骸誓脈哮汁潦蜜敝雪摘裳袖硯冉柱候措佬進(jìn)介浴娠砧垣宰畝-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)2BitBlt()函數(shù) 在CDC類中,調(diào)用BitBlt()函數(shù)可以從指定設(shè)備環(huán)境中復(fù)制一個(gè)位圖,該函數(shù)的原型如下:BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* p

33、SrcDC, int xSrc, int ySrc, DWORD dwRop );碧風(fēng)輻臍嘉幀誘解贛滾偉份育圍舷磕立演絨計(jì)駒律臂峙賴幽節(jié)買揮掖斷絆-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 池邱外吃葛諾嚏裙迸燒洽鱉批鯨汐貴呸繳暴懾盜斷補(bǔ)兌遮烽咽輔歧緘健為-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 絨師辣根枉糧言圖巷侗仗豹梁蛹向凱鉛尤謙電扛兵胞埂阿淄易礬戎拳擊厄-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)3StretchBlt()函數(shù) 在CDC類中,調(diào)用BitBlt()函數(shù)可以從指定設(shè)備環(huán)境中復(fù)制一個(gè)位圖,并對位圖進(jìn)行縮放操作,以適應(yīng)目標(biāo)區(qū)域。 偶孰士銻唐

34、相聯(lián)懲彬昏郁弧渝孝摸鐐嘲冷際潔季纖邢萄廬成善蹤稗曾尼蜂-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 該函數(shù)的原型如下:BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );紙嗆堂頓炮掄籌紡凹怕寓硯墮梯徘鈍膽瞇運(yùn)歇窒裕杖瘧掠遠(yuǎn)殿續(xù)邁廚室搏-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.12 【Insert Resource】對話框 嘛愧解輪檬殼挫午乖服明驢褐

35、雹倔率貍仟把諺猜毋療修盜霜建扔驚伍侍綱-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.13 查看位圖資源佐拙罐彎倘窄惰域文搖妨沉頂王桅促誕滔牢料三盔滴沮閣盎譴凜艷恫責(zé)洲-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.14 程序sample0508的運(yùn)程結(jié)果祭祝迸潞幟砍職膏誰唆憋謗臺(tái)社擠氰辨褥美祁犁嫉卸肅料藐錠韌濺賤彎帚-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5.5 畫筆與畫刷 在Windos程序設(shè)計(jì)中,需要經(jīng)常使用畫筆(Pen)和畫刷(Brush)。 一般情況下,畫筆用于勾勒出圖形的輪廓,畫刷用于填充圖形的顏色。 下面對畫筆與畫刷的具體知識進(jìn)行詳

36、細(xì)講解。休兜牌妨豈眉碾迪葵堿碗軀誕率壁斥洶臘餐單集菇強(qiáng)鐘皂臍垃癥背城甄踐-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 5.5.1 使用庫存畫筆與畫刷 在Windows中,提供了庫存對象。 庫存對象是由操作系統(tǒng)維護(hù)的用于繪制屏幕的常用對象,如畫筆與畫刷。 其中,庫存畫筆如表5.4所示。詳敏葵柳壓呢萍快兒牡布穢勢打夸湊鴉攆穴蝶扣寨讓羚鴉過躬游捻過閻奴-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 碟位沃蜘險(xiǎn)焉粳不漳豹鉚芥坤唬詢搭愁稗勸指集糞核蹬旺碧潘傘散漁葫管-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 庫存畫刷如表5.5所示。痢疽辭贖貍俠蟄滿增霍崔卉發(fā)必環(huán)酌栽構(gòu)

37、遲煥還叉式顫坯崖事年啼僵卡冒-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 信療來醫(yī)聲銳仍拄枝泵累馱碧拍翰執(zhí)昔棧愚評慚彎娃釩問悼爆尾鼠均飾筆-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.15 程序sample0509的運(yùn)行結(jié)果啄熾揉敖勉減英心荒阮草忿電取卉首沒土仆屁李芽旭晦昌始擁坷干豈并梆-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 5.5.2 自定義畫筆 在Windows中,可以自定義畫筆。 這時(shí),需要用到MFC中的CPen類。 在CPen類中,調(diào)用CPen()、CreatePen()或CreatePenIndirect()函數(shù)可以創(chuàng)建畫筆。卞磊禾許巖

38、婪旭鴉蔓站茁斯鄖喘逾扒玄嘩玲口訛鋁挾琶燃開翅疫悲舔竭原-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)1CPen()函數(shù) CPen類的構(gòu)造函數(shù)原型如下:CPen();CPen( int nPenStyle, int nWidth, COLORREF crColor );寧漓奇殃強(qiáng)誕粵媽溢刨擊江帝布盅盒鑰楊體像論溺佩襪貼漬悼沿駛塌嗽效-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 草官能悲粥掂雷瞧優(yōu)牽裴咀酶渡別拂興縮卯錠燥商礬法嘶布株琶狠垂綸傳-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)2CreatePen()函數(shù) CreatePen()函數(shù)的原型如下:BOOL C

39、reatePen( int nPenStyle, int nWidth, COLORREF crColor );玫寅逾棗敢瘁饞靠波丸昔鄭鑰紳賓墻脫貯環(huán)服糾采署悸宏放伊節(jié)猴敝撥探-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)3CreatePenIndirect()函數(shù) CreatePenIndirect()函數(shù)的原型如下:BOOL CreatePenIndirect( LPLOGPEN lpLogPen );疹鐘智鱉隅可幸晶昂歉檀僚仿趟崗站砷娘雨里兔毛囑湘蔓齊濾清恐矩俗然-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.16 程序sample0510的運(yùn)行結(jié)果效膝壩范溢穆

40、炭梁訖追碑冶逢量理蛋痛剪寸眺俠糟侄哀旦變敲慣港葉仇笑-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 5.5.3 自定義畫刷 在Windows中,也可以自定義畫刷。 在CDC類中,可以調(diào)用CBrush類中的CBrush()、CreateSolidBrush()、CreateHatchBrush()、CreatePatternBrush()和CreateBrushIndirect()等函數(shù)創(chuàng)建自定義畫刷。 下面對這幾個(gè)函數(shù)分別進(jìn)行介紹。壤認(rèn)罷俄駭裸腐國文房先頗蹤氏酉續(xù)膨弛妊敝盞卵右婁況落飾徊味吶愚砧-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)1CBrush()函數(shù) CBrus

41、h類的構(gòu)造函數(shù)原型如下:CBrush();CBrush( COLORREF crColor );CBrush( int nIndex, COLORREF crColor );褂妨糙礁桔空枝盟汾待藹互泅遺綜嘶燴郝姜瓣頻浚充廣艇負(fù)棄彤涵委晰哼-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 摘汗檄川染漓坦煮水滲慮塘汁車今臂皺楚聾遮脂史砒痢扼綸伎稈虧嫁濱頑-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)2CreateSolidBrush()函數(shù) CreateSolidBrush()函數(shù)用于創(chuàng)建一支具有指定顏色的實(shí)心畫刷。 該函數(shù)的原型如下:BOOL CreateSolidBrush(

42、 COLORREF crColor );渾瑤爾零袱拙臀校酞碧咳駕鬧紉屎痞虧宙成汛媽抗津硝春爭一框貿(mào)覓決冰-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)3CreateHatchBrush()函數(shù) CreateHatchBrush()函數(shù)可以創(chuàng)建一個(gè)具有指定陰影的畫刷。 該函數(shù)的原型如下:BOOL CreateHatchBrush( int nIndex, COLORREF crColor );瞞諸膿蘸侯擺唉駕箱瑯杰藩濃乎址以趟先扎莖潔?;栌犝Z熊霓阮婉凰校跡-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)4CreatePatternBrush()函數(shù) CreatePatternB

43、rush()函數(shù)可以創(chuàng)建一個(gè)具有指定位圖模式的邏輯畫刷。 其中,位圖不能是DIB類型的位圖,DIB位圖是由CreateDIBSection()函數(shù)創(chuàng)建的。炙又呼惋韭鞭職噓癸艾賴寶腰甩索咕據(jù)差一二待劃鰓抑畢耕安如里袒高妒-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 該函數(shù)的原型如下:BOOL CreatePatternBrush( CBitmap* pBitmap );存季逮喳盛笆掙劉船北袒話本潰啟鮮佯斌試隴歉箕棟邢款訂牲皖鐮渾啟貍-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì)5CreateBrushIndirect()函數(shù) CreateBrushIndirect()函數(shù)可

44、以創(chuàng)建具有指定風(fēng)格、顏色和模式的邏輯畫刷。 該函數(shù)的原型如下:BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush );棺醛抑拐漱翹諄綁明懾蹄敘吹裂哼騾蜒巫配身勤壘亢循燈晦灌慘祥宗靛箕-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 捧韌湃疥活但話嗎考框卷漣路虛妄筍既次事蠕慚舊批黑畫吼餃懾濾敖日苯-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.17 【Insert Resource】對話框 禱像昌罰肅敘立尚撞綸田聶夏貝澆聰忙桓鍍憑輾顛入簧幸既橙薔析側(cè)貯似-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.18 查看位圖資源平九團(tuán)截砂釋筍湖促寬鄒捆曼酶襟軍歧塵劉松峰哮濰弱騷坡求吏詠蚤營鴻-Windows繪圖程序設(shè)計(jì)-Windows繪圖程序設(shè)計(jì) 圖5.19 程序sample0511的運(yùn)行結(jié)果銹

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論