VC++案例教程:第5章 圖形圖像_第1頁(yè)
VC++案例教程:第5章 圖形圖像_第2頁(yè)
VC++案例教程:第5章 圖形圖像_第3頁(yè)
VC++案例教程:第5章 圖形圖像_第4頁(yè)
VC++案例教程:第5章 圖形圖像_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第5章圖形設(shè)備接口(繪圖)河北經(jīng)貿(mào)大學(xué)信息技術(shù)學(xué)院2008年12月VC+案例教程VC+案例教程 北大出版社教學(xué)目標(biāo) 了解設(shè)備環(huán)境和圖形設(shè)備接口(GDI)的基本概念;掌握常用GDI對(duì)象的使用方法;掌握如何繪制圖形和輸出文本。VC+案例教程 北大出版社案例介紹 在很多情況下,你可能需要輸出不同格式的文本,或者你希望顯示或?yàn)g覽一些漂亮的背景圖片,或者你還希望繪制出自己喜歡的圖形。本章將通過(guò)一個(gè)繪制時(shí)鐘案例,介紹VC+中常用的繪圖工具和繪圖操作。案例運(yùn)行效果如圖5.1所示。 VC+案例教程 北大出版社5.1 圖形設(shè)備接口 5.1.1 GDI GDI負(fù)責(zé)系統(tǒng)與用戶(hù)或繪圖程序之間的信息交換,并控制在輸出設(shè)

2、備上顯示圖形或文字, 是Windows系統(tǒng)的重要組成部分。MFC的CDC類(lèi)對(duì)GDI函數(shù)進(jìn)行了全面的封裝,使用CDC類(lèi)可以方便的完成圖形與文本的操作VC+案例教程 北大出版社5.1.2 設(shè)備環(huán)境類(lèi)(CDC) 常用的設(shè)備環(huán)境類(lèi)CDCCClientDCCWindowDCCPaintDCCDC的內(nèi)容 當(dāng)前GDI繪圖對(duì)象及其管理 映射模式 繪圖操作 VC+案例教程 北大出版社5.1.3 設(shè)備環(huán)境的使用在視圖類(lèi)的OnDraw()函數(shù)中 使用設(shè)備環(huán)境類(lèi)的對(duì)象使用GetDC( )函數(shù)獲取設(shè)備環(huán)境VC+案例教程 北大出版社5.2 CDC類(lèi)概述 5.2.1 常用的GDI對(duì)象5.2.1.1 CPen類(lèi) 5.2.1.

3、2 CBrush類(lèi) 5.2.1.3 CFont類(lèi) 5.2.1.4 CBitmap類(lèi) 5.2.1.5 CRgn類(lèi) VC+案例教程 北大出版社5.2.1.1 CPen類(lèi) 畫(huà)筆用來(lái)畫(huà)線(xiàn)及繪制有形邊框。Windows提供了兩種筆:裝飾筆和幾何筆。裝飾筆用設(shè)備單位畫(huà)線(xiàn),不考慮當(dāng)前映射模式;幾何筆則用邏輯單位畫(huà)線(xiàn),受當(dāng)前映射模式的影響 庫(kù)存畫(huà)筆庫(kù)存畫(huà)筆由Windows操作系統(tǒng)提供,用戶(hù)可以直接使用。庫(kù)存畫(huà)筆有三種:BLACK_PEN(黑色畫(huà)筆)、WHITE_PEN(白色畫(huà)筆)和NULL_PEN(空畫(huà)筆)。如果要使用這些畫(huà)筆,只需調(diào)用CDC類(lèi)的的成員函數(shù)SelectStockObject()即可 VC+案例

4、教程 北大出版社自定義畫(huà)筆創(chuàng)建畫(huà)筆:兩種方法一:使用CPen類(lèi)的帶參構(gòu)造函數(shù)定義畫(huà)筆對(duì)象 二:使用CPen類(lèi)的無(wú)參構(gòu)造函數(shù)定義畫(huà)筆對(duì)象,再調(diào)用CreatePen()函數(shù)創(chuàng)建指定畫(huà)筆。裝載畫(huà)筆:SelectObject() 還原畫(huà)筆:SelectObject() 和DeleteObject() VC+案例教程 北大出版社5.2.1.2 CBrush類(lèi) 畫(huà)刷是Windows編程時(shí)用來(lái)填充控件、窗口或其他區(qū)域的GDI對(duì)象。1. 庫(kù)存畫(huà)刷庫(kù)存畫(huà)刷由Windows操作系統(tǒng)提供,用戶(hù)可以通過(guò)CDC類(lèi)的成員函數(shù)SelectStockObject()將庫(kù)存畫(huà)刷選入設(shè)備環(huán)境。庫(kù)存畫(huà)刷有:BLACK_BRUSH(

5、黑色畫(huà)刷)、DKGRAY_BRUSH(深灰色畫(huà)刷)、GRAY_BRUSH(灰色畫(huà)刷)、LTGRAY_BRUSH淺灰色畫(huà)刷、NULL_BRUSH(空畫(huà)刷,即內(nèi)部不填充)和WHITE_BRUSH(白畫(huà)刷)。 VC+案例教程 北大出版社自定義畫(huà)刷 實(shí)心畫(huà)刷:與實(shí)心畫(huà)筆相似,可以通過(guò)COLORREF在創(chuàng)建畫(huà)刷時(shí)設(shè)置顏色。CreateSo1idBush()陰影畫(huà)刷:用預(yù)定義陰影圖案來(lái)填充區(qū)域。CreateHatchBrush () 位圖畫(huà)刷:用88的位圖填充區(qū)域。 CreatePatternBrush () VC+案例教程 北大出版社5.2.1.3 CFont類(lèi)構(gòu)造CFont類(lèi)對(duì)象: CFont fon

6、t; 創(chuàng)建CFont類(lèi)對(duì)象: CreateFont()選入CFont類(lèi)對(duì)象: SelectObject();VC+案例教程 北大出版社創(chuàng)建字體BOOL CreateFont (int nHeight, /字體高度,0采用系統(tǒng)默認(rèn)值,使用邏輯單位 int nWidth, /字體寬度,取0則由系統(tǒng)根據(jù)高寬比取最佳值 int nEscapement, /每行文字相對(duì)于頁(yè)底的角度,單位為0.1度 int nOrienation, /每個(gè)文字相對(duì)于頁(yè)底的角度,單位為0.1度 DWORD nWeight, /字體粗細(xì)度,范圍為11000 DWORD Dwltalic, /如果要求字體傾斜,則取 TRUE

7、DWORD dwUnderline,/如果要求下劃線(xiàn),則取 TRUE DWORD dwStrikeout,/如果要求中劃線(xiàn),則取 TRUE DWORD dwCharset, /字體所屬字符集 DWORD dwOutputPrecision,/輸出精度,一般取默認(rèn)值OUT_DEFAULT_PRECIS DWORD dwClipPrecision, /剪裁精度,常取默認(rèn)值CLIP_DEFAULT_PRECIS DWORD dwQuality, /輸出質(zhì)量,一般取默認(rèn)值DEFAULT_QUALITY DWORD dwPitchAndFamily, /字體名可選的系統(tǒng)字符集:ANSI_CHARSETO

8、EM_CHARSETSYMBOL_CHARSETDEFAULT_CHARSETSHIFTJIS_CHARSETVC+案例教程 北大出版社設(shè)置字體和背景顏色設(shè)置字體顏色:SetTextColor(crColor);設(shè)置背景顏色:SetBkColor(crColor);crColor為設(shè)置的顏色VC+案例教程 北大出版社5.2.1.4 CBitmap類(lèi) 位圖是常用的圖像存儲(chǔ)格式,可以利用位圖來(lái)表示圖像,也可以利用它來(lái)創(chuàng)建畫(huà)刷。MFC將有關(guān)位圖的操作封裝在CBitmap類(lèi)中。使用位圖的一般步驟為:首先聲明一個(gè)CBitmap類(lèi)對(duì)象,然后對(duì)位圖對(duì)象進(jìn)行初始化并選入設(shè)備環(huán)境,位圖使用完畢后還要調(diào)用Dele

9、leObject()將其清除。常用函數(shù):LoadBitmap函數(shù) CreateCompatibleBitmap函數(shù)VC+案例教程 北大出版社5.2.1.5 CRgn類(lèi)CRgn類(lèi)封裝了一個(gè)Windows GDI區(qū)域?qū)ο螅粋€(gè)區(qū)域是由多邊形、橢圓或二者組合形成的一種范圍,可以利用它來(lái)進(jìn)行填充、裁剪某個(gè)區(qū)域。構(gòu)造CRgn對(duì)象 初始化CRgn對(duì)象 刪除CRgn對(duì)象: DeleteObject() VC+案例教程 北大出版社5.2.2 CDC中的繪圖操作 5.2.2.1 繪圖模式 繪圖模式是指系統(tǒng)使用當(dāng)前繪圖工具(包括畫(huà)筆、畫(huà)刷等)的顏色和屏幕顯示的顏色進(jìn)行混合以得到新的顯示顏色的方式。繪圖模式?jīng)Q定了顏

10、色混合的算法。默認(rèn)的繪圖模式是R2_COPYPEN,在這種模式下,系統(tǒng)簡(jiǎn)單地將畫(huà)筆的顏色復(fù)制到顯示設(shè)備上。用戶(hù)可以通過(guò)CDC的成員函數(shù)SetROP2()改變繪圖模式: VC+案例教程 北大出版社5.2.2.2 繪圖函數(shù) 畫(huà)點(diǎn):MoveTo() 畫(huà)直線(xiàn): LineTo()畫(huà)橢圓: Ellipse() 畫(huà)矩形: Rectangle() VC+案例教程 北大出版社5.2.2.3 輸出文本 設(shè)置背景顏色: SetBkColor() 設(shè)置背景模式: SetBkMode() 設(shè)置文本對(duì)齊方式 : SetTextAlign() 設(shè)置文本顏色 :SetTextColor()文本輸出: TextOut()函數(shù)

11、DrawText()函數(shù) VC+案例教程 北大出版社5.2.2.4 顯示位圖 BitBlt函數(shù) StretchBlt函數(shù) VC+案例教程 北大出版社5.2.3 案例5.1 繪制時(shí)鐘 本案例通過(guò)一個(gè)單文檔應(yīng)用程序,來(lái)演示如何在視圖中輸出文本、顯示位圖、繪制時(shí)鐘。從而說(shuō)明設(shè)備環(huán)境的獲取和釋放,畫(huà)筆、畫(huà)刷、字體等GDI對(duì)象的使用,以及文本的輸出、背景模式和文本顏色的設(shè)置。在本案例中,繪制時(shí)鐘是難點(diǎn)。時(shí)鐘的表盤(pán)通過(guò)繪制一個(gè)圓形來(lái)實(shí)現(xiàn),表的時(shí)針、分針和秒針通過(guò)繪制不同寬度的直線(xiàn)實(shí)現(xiàn),通過(guò)創(chuàng)建新字體實(shí)現(xiàn)表盤(pán)數(shù)字的繪制。 VC+案例教程 北大出版社1、創(chuàng)建工程用MFC AppWizard(.exe)創(chuàng)建一個(gè)

12、對(duì)話(huà)框應(yīng)用程序,項(xiàng)目名為UseDC 。VC+案例教程 北大出版社2、使用位圖導(dǎo)入位圖資源。顯示位圖CBitmap Bitmap; Bitmap.LoadBitmap(IDB_BITMAP1); / 加載位圖CDC MemDC;MemDC.CreateCompatibleDC(pDC);/ 創(chuàng)建與pDC兼容的內(nèi)存設(shè)備環(huán)境CBitmap *pOldBmp=MemDC.SelectObject(&Bitmap); / 選入位圖CRect rc;GetClientRect(&rc); / 取得視圖客戶(hù)區(qū)大小pDC-BitBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0

13、,SRCCOPY);/顯示MemDC.SelectObject(pOldBmp); / 恢復(fù)原來(lái)的位圖VC+案例教程 北大出版社3、使用CFont類(lèi)輸出文本 pDC-SetBkMode(TRANSPARENT); / 設(shè)置背景模式 CFont NewFont1; / CFont聲明對(duì)象/ 使用CreateFont函數(shù)創(chuàng)建新字體NewFont1.CreateFont(40,0,0,0,400,true,FALSE,0,ANSI_CHARSET, OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_

14、SWISS,Arial);/ 將新字體選入設(shè)備環(huán)境CFont* pOldFont=pDC-SelectObject(&NewFont1); pDC-TextOut(20,20,導(dǎo)入背景圖片); / 輸出文本pDC-SelectObject(pOldFont); / 恢復(fù)原來(lái)的字體NewFont.DeleteObject(); / 釋放資源VC+案例教程 北大出版社(5)繪制時(shí)鐘 VC+案例教程 北大出版社(6)設(shè)置定時(shí)器 SetTimer(1,1000,NULL); / 設(shè)置定時(shí)器 void CUseDCView:OnTimer(UINT nIDEvent) / TODO: Add your

15、message handler code here and/or call defaultCRect rc;GetClientRect(&rc); / 取得視圖客戶(hù)區(qū)大小/ 定義鐘表大小和位置CRect Clock; Clock.left = rc.right - 110 ;Clock.top = rc.top + 10 ;Clock.right = rc.right - 10;Clock.bottom=rc.top + 110 ;CRgn Rgn; / 定義區(qū)域?qū)ο驲gn.CreateEllipticRgnIndirect(&Clock); / 創(chuàng)建一個(gè)區(qū)域InvalidateRgn(&Rgn);

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論