圖形設(shè)備接口_第1頁(yè)
圖形設(shè)備接口_第2頁(yè)
圖形設(shè)備接口_第3頁(yè)
圖形設(shè)備接口_第4頁(yè)
圖形設(shè)備接口_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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、Visual C+程序設(shè)計(jì)楊琦計(jì)算機(jī)教學(xué)實(shí)驗(yàn)中心西安交通大學(xué)第3章 圖形設(shè)備接口 .授 課 內(nèi) 容3.1 圖形設(shè)備接口的根本概念3.2 繪圖工具類(lèi)3.3 畫(huà)筆與畫(huà)刷3.4 位圖3.5 字體3.6 繪圖方式3.7 庫(kù)存圖形對(duì)象3.8 典型案例.3.1 設(shè)備環(huán)境類(lèi)和圖形對(duì)象圖形設(shè)備接口GDI Graphics Device Interface,GDI設(shè)備環(huán)境類(lèi):CPaintDC 、CWindowDC 等.3.2 繪圖工具類(lèi).CGdiObject類(lèi)的常用成員函數(shù)函數(shù)含義Attach鏈接一個(gè)Windows GDI對(duì)象到一個(gè)CGdiObject對(duì)象CreateStockObject返回Windows預(yù)定

2、義的庫(kù)存畫(huà)筆、畫(huà)刷或字體的句柄DeleteObject刪除連接到CGdiObjectDeleteTempMap刪除任何由FromHandle所創(chuàng)建的臨時(shí)CGDIObject對(duì)象Detach使Windows GDI對(duì)象與CGDIObject對(duì)象斷開(kāi)連接,并返回Windows GDI對(duì)象的句柄GetSafeHandle除非this為NULL時(shí)該成員函數(shù)返回NULL;否則返回m_hObject.3.3 畫(huà)筆與畫(huà)刷 CPen類(lèi):BOOL CPen: CreatePen (int nPenStyle, int nWidth, COLORREF crColor);第1個(gè)參數(shù)是畫(huà)筆款式,可取PS_SOLID

3、創(chuàng)建實(shí)線筆PS_DASH創(chuàng)建由短線構(gòu)成的虛線PS_DOT創(chuàng)建由點(diǎn)構(gòu)成的虛線PS_DASHDOT創(chuàng)建由短線和點(diǎn)構(gòu)成的虛線PS_DASHDOTDOT由短線、點(diǎn)、點(diǎn)構(gòu)成的虛線PS_NULL創(chuàng)建空空白畫(huà)筆.CDC:SelectObject函數(shù)原型CPen* SelectObject( CPen* pPen );CBrush* SelectObject( CBrush* pBrush );CFont* SelectObject( CFont* pFont );.CPen類(lèi).CPen類(lèi)void CMyView:OnDraw(CDC* pDC) CPen penMountain,*pOldpen;penMo

4、untain.CreatePen(PS_SOLID,3,RGB(125, 50, 0);pOldpen=pDC-SelectObject(&penMountain);CPoint m_pointMountain5;m_pointMountain0 = CPoint(100, 200);m_pointMountain1 = CPoint(200, 100);m_pointMountain2 = CPoint(300, 150);m_pointMountain3 = CPoint(400, 50);m_pointMountain4 = CPoint(600, 200);pDC-Polyline(m

5、_pointMountain, 5);pDC-MoveTo(0,200);pDC-LineTo(700,200);pDC-SelectObject(pOldpen);.CBrush類(lèi)BOOL CreateSolidBrush ( COLORREF crColor );BOOL CreateHatchBrush ( int nIndex, COLORREF crColor );陰影風(fēng)格說(shuō) 明HS_BDIAGONAL從左下角到右上角的45度斜線/ HS_CROSS水平線與垂直線+HS_DIAGCROSS相互垂直的45度線XXXXXHS_FDIAGONAL45度向下HS_HORIZONTAL水平線-

6、HS_VERTICAL垂直線|.效果圖:.【例3-1】 繪制藍(lán)天、草地和大山.void CMyView:OnDraw(CDC* pDC)CBrush *pOldBrush, brushSky, brushGrass, brushMoutain;CRect rect;GetClientRect(&rect);brushSky.CreateSolidBrush(RGB(127, 200, 255);/ 畫(huà)天空pOldBrush = pDC-SelectObject(&brushSky);pDC-Rectangle(rect);brushGrass.CreateSolidBrush(RGB(0, 2

7、55, 0);/ 畫(huà)草地pDC-SelectObject(&brushGrass);rect.top = 300;pDC-Rectangle(rect);.brushMoutain.CreateSolidBrush(RGB(125, 50, 0);pDC-SelectObject(&brushMoutain);CPoint m_pointMoutain5;m_pointMoutain0 = CPoint(200, 300);m_pointMoutain1 = CPoint(300, 200);m_pointMoutain2 = CPoint(400, 250);m_pointMoutain3

8、= CPoint(500, 150);m_pointMoutain4 = CPoint(700, 300);pDC-Polygon(m_pointMoutain, 5);pDC-SelectObject(pOldBrush);.運(yùn)用CImage顯示圖片1在工程中的stdafx.h文件參與#include 2視圖類(lèi)CImage m_imgBody;3CA09View:CA09View() m_imgBody.Load(vc.bmp); 4void CA09View:OnDraw(CDC* pDC) if(m_imgBody.IsNull()return ;elseint w=m_imgBody.

9、GetWidth();int h=m_imgBody.GetHeight();m_imgBody.Draw(*pDC,0,0,w,h);.1在工程中的stdafx.h文件的末尾添加以下包含語(yǔ)句。#include 2修正視圖類(lèi)的定義頭文件,參與一個(gè)變量定義: class CMyView : public CViewprotected: / 僅從序列化創(chuàng)建CMyView();DECLARE_DYNCREATE(CMyView)/ 屬性public:CMyDoc* GetDocument() const;CImage m_imgBody;以下省略其它定義語(yǔ)句 .CMyView:CMyView()m_

10、imgBody.Load(vc.jpg); void CMyView:OnDraw(CDC* pDC)/ 顯示圖像int nWidth=m_imgBody.GetWidth();int nHeight=m_imgBody.GetHeight();m_imgBody.BitBlt(*pDC,0,0,nWidth,nHeight,0,0,SRCCOPY);.BOOL StretchBlt( HDC hDestDC, int xDest, int yDest, int nDestWidth, int nDestHeight, int xSrc, int ySrc, int nSrcWidth, in

11、t nSrcHeight, DWORD dwROP = SRCCOPY );BOOL BitBlt( HDC hDestDC, int xDest, int yDest, int nDestWidth, int nDestHeight, int xSrc, int ySrc, DWORD dwROP = SRCCOPY ) ;.【例3-2】 直接顯示一張位圖文件.class CMyView : public CViewprotected: / 僅從序列化創(chuàng)建CMyView();DECLARE_DYNCREATE(CMyView)/ 屬性public:CMyDoc* GetDocument()

12、const;/ 定義CBitmap類(lèi)對(duì)象以及位圖的高度和寬度變量CBitmap m_Bitmap;int m_nHeight;int m_nWidth;以下省略其它定義語(yǔ)句.CMyView:CMyView()HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,vc.bmp,IMAGE_BITMAP,0,0, LR_LOADFROMFILE);m_Bitmap.Attach(hBitmap);BITMAP BM;m_Bitmap.GetBitmap(&BM);m_nWidth = BM.bmWidth;m_nHeight = BM.bmHeight;.void CMy

13、View:OnDraw(CDC* pDC)/ 顯示位圖CDC MemDC;MemDC.CreateCompatibleDC(NULL);MemDC.SelectObject(&m_Bitmap);pDC-BitBlt(0,0,m_nWidth,m_nHeight,&MemDC,0,0,SRCCOPY);.3.5字體 CFont類(lèi)的常用成員函數(shù)函數(shù)含義CreateFont用指定的特征初始化一個(gè)CFont對(duì)象CreateFontIndirect用LOGFONT結(jié)構(gòu)中給定的特征初始化一個(gè)CFont對(duì)象CreatePointFont用指定的高和打印字體初始化一個(gè)CFont對(duì)象FromHandle當(dāng)給定

14、一個(gè)Window HFONT句柄時(shí),返回一個(gè)指向CFont對(duì)象指針GetLogFont用與CFont對(duì)象關(guān)聯(lián)的邏輯字體有關(guān)信息填充LOGFONToperator HFONT返回與CFont對(duì)象關(guān)聯(lián)的Window GDI字體句柄.3.4 字體BOOL CreateFont(int nHeight,/ 字符邏輯高度int nWidth,/ 字體邏輯寬度int nEscapement,/ 出口矢量與X軸的角度int nOrientation,/ 字符基線與X軸的角度int nWeight,/ 字體磅值BYTE bItalic,/ 非0那么為斜體BYTE bUnderline,/ 非0那么加下劃線BY

15、TE cStrikeOut,/ 非0那么加刪除線BYTE nCharSet,/ 此字體的字符集BYTE nOutPrecision,/ 輸出精度BYTE nClipPrecision,/ 裁剪精度BYTE nQuality,/ 輸出質(zhì)量BYTE nPitchAndFamily,/ 調(diào)距和字體族LPCTSTR lpszFacename );/ 字體的字型名.顯示字體CFont *pOldFont, font;font.CreateFont(50, 0, 0,0, FW_NORMAL, FALSE,FALSE,0, GB2312_CHARSET,OUT_DEFAULT_PRECIS, CLIP_D

16、EFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH, 楷體); / 創(chuàng)建字體對(duì)象pOldFont = pDC-SelectObject(&font); pDC-SetTextColor(RGB(255, 0, 0);pDC-TextOut(10, 10, Hello,VC+);pDC-SelectObject(pOldFont);.3.6 繪圖方式 int SetROP2 ( int nDrawMode );繪圖模式說(shuō)明R2_BLACKR2_WHITER2_NOPR2_NOTR2_NOTCOPYPEN R2_COPYPENR2_XORPEN無(wú)論畫(huà)筆色如何,

17、只用黑色繪圖;無(wú)論畫(huà)筆色如何,只用白色繪圖;無(wú)論畫(huà)筆色如何,用無(wú)色筆繪圖;用與背景色相反的顏色繪圖;用與畫(huà)筆色相反的顏色繪圖;用畫(huà)筆色繪圖;對(duì)畫(huà)筆色和背景色作異或(XOR)運(yùn)算。.思索題在例3-1中添加如下代碼,效果如何?pDC-SetROP2(R2_BLACK);或者:pDC-SetROP2(R2_XORPEN);.3.7 庫(kù)存圖形對(duì)象 virtual CGdiObject* SelectStockObject( int nIndex ); 圖形對(duì)象說(shuō)明BLACK_PENNULL_PENWHITE_PENBLACK_BRUSHWHITE_BRUSHDKGRAY_BRUSH GRAY_BRUS

18、HLTGRAY_BRUSH NULL_BRUSHANSI_FIXED_FONTANSI_VAR_FONT DEFAULT_GUI_FONT SYSTEM_FONT 黑筆空筆,不畫(huà)線或邊框白筆黑色刷子白色刷子暗灰刷子灰色刷子淡灰色刷子空刷子,內(nèi)部不填充Windows固定傾角(單間隔)系統(tǒng)字體Windows可變傾角(比例間隔)系統(tǒng)字體缺省GUI字體(如菜單和對(duì)話框字體)系統(tǒng)字體.例3-4 鼠標(biāo)切換橢圓的圖形.class CMyView : public CViewint m_nColor;CRect m_rectEllipse;protected: / 僅從序列化創(chuàng)建CMyView();以下省略文

19、檔類(lèi)的其他定義語(yǔ)句public:afx_msg void OnLButtonDown(UINT nFlags, CPoint point); CMyView:CMyView()m_rectEllipse = CRect(100,100,300,250);m_nColor = 0; void CMyView:OnDraw(CDC* pDC)switch(m_nColor)case 0:pDC-SelectStockObject(GRAY_BRUSH);break;case 1:pDC-SelectStockObject(LTGRAY_BRUSH);break;case 2:pDC-SelectS

20、tockObject(BLACK_BRUSH);break;pDC-Ellipse(m_rectEllipse); /畫(huà)橢圓 .void CMyView:OnLButtonDown(UINT nFlags, CPoint point)if(m_rectEllipse.PtInRect(point)m_nColor = (m_nColor+1)%3; InvalidateRect(m_rectEllipse);CView:OnLButtonDown(nFlags, point); .3.8 典型案例【例3-5】 編寫(xiě)爆破人挪動(dòng)程序。 【例3-6】 編寫(xiě)程序,模擬炸彈爆炸動(dòng)畫(huà)。.【例3-5】 編寫(xiě)

21、爆破人挪動(dòng)程序.編程步驟:1“用Visual C+ 2021集成開(kāi)發(fā)環(huán)境開(kāi)發(fā)MFC運(yùn)用程序建立單文檔運(yùn)用程序,該工程稱(chēng)號(hào)為My,去掉運(yùn)用Unicode庫(kù)選項(xiàng),其他選項(xiàng)采用默許設(shè)置。2在工程中的stdafx.h文件的末尾添加以下包含語(yǔ)句。#include .class CMyView : public CViewprotected: / 僅從序列化創(chuàng)建CMyView();DECLARE_DYNCREATE(CMyView)/ 屬性public:CMyDoc* GetDocument() const;private:CImage m_bmpMan;/創(chuàng)建位圖對(duì)象int m_nWidth; /位圖寬

22、度int m_nHeight;/位圖高度CRect m_rectMan; /位圖矩形區(qū)域int m_nStep;/人每次走過(guò)的像素點(diǎn)以下省略文檔類(lèi)的其他定義語(yǔ)句;.CMyView:CMyView()m_nStep=10;m_bmpMan.Load(Man.bmp);m_nWidth=m_bmpMan.GetWidth();m_nHeight=m_bmpMan.GetHeight();m_rectMan=CRect(100,100,100+m_nWidth,100+m_nHeight); 4修正視圖類(lèi)的構(gòu)造函數(shù).void CMyView:OnDraw(CDC*pDC)int x=m_rectMan.left;int y=m_rectMan.top;m_bmpMan.BitBlt(*pDC,x,y,m_nWidth,m_nHeight,0,0,SRCCOPY);5修正視圖類(lèi)的OnDraw函數(shù).void CMyView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)CRect rectClient;GetClientRect(&rectClient

溫馨提示

  • 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)論