圖形程序設(shè)計_第1頁
圖形程序設(shè)計_第2頁
圖形程序設(shè)計_第3頁
圖形程序設(shè)計_第4頁
圖形程序設(shè)計_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

圖形程序設(shè)計1第1頁,課件共33頁,創(chuàng)作于2023年2月

8.1設(shè)備上下文分類(設(shè)備環(huán)境)CDC類(設(shè)備環(huán)境類,Cobject的子類)

CDC類提供了對設(shè)備描述表進行操作的成員函數(shù)以及對窗口有關(guān)描述表進行操作的成員函數(shù)。用提供的函數(shù)對設(shè)備描述表進行操作,繪圖工具的使用,圖形界面的選擇、顏色及調(diào)色板的操作。取得繪圖的屬性、映射方式、視口及窗口的操作、坐標轉(zhuǎn)換等。2第2頁,課件共33頁,創(chuàng)作于2023年2月

CDC

CPaintDC

CClientDC

CWindowDC

CMetaFileDC

CPreviewDC

Cobject打印預(yù)覽輸出類CDC的子類3第3頁,課件共33頁,創(chuàng)作于2023年2月

CDC的派生類:

CpaintDC類一般用在函數(shù)OnPaint()內(nèi),響應(yīng)WM_PAINT的消息。

windows的消息循環(huán)機制一直在采集各種消息,當接到WMPAINT消息時,自動調(diào)用固定的繪圖函數(shù),使用CpaintDC類對象的成員函數(shù),完成客戶區(qū)繪圖。

(BeginPaint,EndPaint實現(xiàn)句柄建立與釋放)

②CClientDC類窗口客戶設(shè)備描述表,對窗口客戶區(qū)的圖形訪問。(GetDC,ReleaseDC實現(xiàn)句柄建立與釋放)

CwindowDC類提供一個設(shè)備環(huán)境、以便成員函數(shù)在包括非客戶區(qū)在內(nèi)的整個屏幕區(qū)的繪圖。(GetwindowDC,ReleaseDC建立與釋放句柄)4第4頁,課件共33頁,創(chuàng)作于2023年2月

④CMetaFileDC類

封裝Windows圖元文件中的繪圖方法.

構(gòu)造對象,調(diào)用Create函數(shù),繪圖:MoveTo,LineTo,…,Close,

返回句柄.(CreateEnhanced,CloseEnhanced建立與釋放句柄)2.繪圖類的主要差別①

CwindowDC類與CpaintDC和CClientDC類的區(qū)別

CwindowDC可以在非客戶(窗口)繪制圖形,坐標是全屏幕。

CpaintDC和CClientDC只能在客戶區(qū)繪制圖形。坐標原點是客戶區(qū)的左上角。

CpaintDC類與CClientDC類的區(qū)別都可在客戶內(nèi)作圖,區(qū)別是CpaintDC類應(yīng)用在OnPaint函數(shù)中,以響應(yīng)windows的WM_PAINT消息,自動實現(xiàn)作圖。

CClientDC類可以實現(xiàn)實時繪圖。

5第5頁,課件共33頁,創(chuàng)作于2023年2月

CClientDCCWindowDC6第6頁,課件共33頁,創(chuàng)作于2023年2月

3.繪圖類的引用方法

①CDC類

CDC類不能用窗口對象指針初始化對象,一般不聲明對象直接應(yīng)用。常用于建立內(nèi)存設(shè)備描述對象。OnDraw(CDC*pDC)②CpaintDC類

CpaintDCdc(this);

定義一個CpaintDC的對象dc,并用當前窗口對象指針this對對象dc進行初始化。

CClientDC類

CClientDCdc(this);

定義一個CClientDC的對象dc,并用當前窗口對象指針this對對象dc進行初始化。

7第7頁,課件共33頁,創(chuàng)作于2023年2月

CwindowDC類

CwindowDCdc(this);

定義一個CwindowDC類的對象dc,并用當前窗口對象指針this對dc進行初始化。4.CDC的部分函數(shù)

繪圖對象的函數(shù)SetObject()

顏色調(diào)色板函數(shù)SelectPalette()

繪圖屬性函數(shù)SetBkColor()

映射函數(shù)SetMapMode()

繪制線條函數(shù)LineTo()

置筆位置函數(shù)MoveTo()

圓狐函數(shù)Arc()

文本顏色函數(shù)SetTextColor()8第8頁,課件共33頁,創(chuàng)作于2023年2月voidCMyView::OnDraw(CDC*pDC){CClientDCdc(this);

dc.TextOut(100,100,“成都理工大學(xué)圖形輸出“);}voidCmyView::OnDraw(CDC*pDC){pDC->SetMapMode(2);0.1mm/(象素)

pDC->SetViewportOrg(100,100);pDC->Rectangle(0,0,200,200);}用CClientDC繪圖:用CDC繪圖:9第9頁,課件共33頁,創(chuàng)作于2023年2月8.2圖形設(shè)備對象利用MFC開發(fā)繪圖程序時,需要各種繪圖工具,如用來繪制線條的畫筆、填充圖形的畫刷及設(shè)置文本格式的字體、顏色等,這些工具稱為圖形設(shè)備對象。MFC提供了圖形設(shè)備對象類對它們進行封裝,這些圖形設(shè)備對象的描述見表。10第10頁,課件共33頁,創(chuàng)作于2023年2月8.3字體對象在Windows內(nèi)部,字體用一個名為LOGFONT的結(jié)構(gòu)表示,結(jié)構(gòu)LOGFONT的定義如下:11第11頁,課件共33頁,創(chuàng)作于2023年2月

文本處理實例voidCCEx07aView::OnDraw(CDC*pDC){ CCEx07aDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahereLOGFONTEx07aFont;定義結(jié)構(gòu)體變量名

Ex07aFont.lfHeight=8;結(jié)構(gòu)體成員中字體高度

Ex07aFont.lfWidth=0;字體平均寬度

Ex07aFont.lfEscapement=0;文本顯示的角度

Ex07aFont.lfOrientation=0;字體的角度

Ex07aFont.lfWeight=FW_NORMAL;字體磅數(shù)

Ex07aFont.lfItalic=0;斜體字體

Ex07aFont.lfUnderline=0;下劃線字體

Ex07aFont.lfStrikeOut=0;刪除線的字12第12頁,課件共33頁,創(chuàng)作于2023年2月

Ex07aFont.lfCharSet=ANSI_CHARSET;Ex07aFont.lfOutPrecision=OUT_DEFAULT_PRECIS;Ex07aFont.lfClipPrecision=CLIP_DEFAULT_PRECIS;Ex07aFont.lfQuality=PROOF_QUALITY;Ex07aFont.lfPitchAndFamily=VARIABLE_PITCH|FF_ROMAN;strcpy(Ex07aFont.lfFaceName,"TimesNewRoman");intposition=0;for(inti=0;i<8;i++){Ex07aFont.lfHeight=16+(i*8);CFontfont;font.CreateFontIndirect(&Ex07aFont);CFont*oldFont=pDC->SelectObject(&font);position=position+Ex07aFont.lfHeight;13第13頁,課件共33頁,創(chuàng)作于2023年2月

pDC->SetTextColor(RGB(40+i*30,0,0));置色

pDC->SetBkMode(TRANSPARENT);置模式

pDC->TextOut(20,position,"成都理工大學(xué)"); pDC->SelectObject(oldFont);}} 14第14頁,課件共33頁,創(chuàng)作于2023年2月

15第15頁,課件共33頁,創(chuàng)作于2023年2月8.4畫筆對象

MFC中的CPen類封裝了畫筆的功能,畫筆對象可以幫助繪制出線條復(fù)雜的圖形。一般通過兩個步驟創(chuàng)建畫筆對象,首先定義一個CPen對象,然后調(diào)用CreatePen函數(shù)初始化畫筆。CreatePen函數(shù)有以下兩種函數(shù)原型,第一種函數(shù)原型如下:BOOLCreatePen(intnPenStyle,intnWidth,COLORREFcrColor);16第16頁,課件共33頁,創(chuàng)作于2023年2月Cpen類的使用步驟如下:(1)定義畫筆對象;(2)初始化畫筆對象;(3)將生成的新畫筆選入當前設(shè)置上下文,同時保留舊的畫筆信息;(4)進行繪圖;(5)恢復(fù)舊的畫筆信息。17第17頁,課件共33頁,創(chuàng)作于2023年2月8.5畫刷對象畫刷對象用來在繪圖輸出時填充一個封閉圖形,實際上定義了一個8像素×8像素大小的位圖,在繪圖時,windows將多個這樣的位圖平鋪起來,填充封閉圖形。MFC中的CBrush類封裝了畫刷的功能。在創(chuàng)建畫刷時,通常先定義CBrush對象,然后調(diào)用CreateSolidBrush,CreateaHatchBrush或CreatePattemBrush函數(shù),初始化畫刷對象。18第18頁,課件共33頁,創(chuàng)作于2023年2月CBrush類的使用步驟如下:(1)定義畫刷對象;(2)初始化畫刷對象;(3)將生成的新畫刷選入當前設(shè)備上下文,同時保留舊的畫刷信息;(4)進行繪圖;(5)恢復(fù)舊的畫刷信息。19第19頁,課件共33頁,創(chuàng)作于2023年2月畫筆與畫刷結(jié)構(gòu)(GDI對象中的繪圖)

CGdiObject

CBitmap

CBrush

CFont

CPalette

CPen

CRgn20第20頁,課件共33頁,創(chuàng)作于2023年2月1.畫筆的使用

構(gòu)造一支畫筆

Cpen();Cpen(intnPenStyle,intnWidth,COLORREFcrColor);

風格寬度顏色

Cpenpen1(PS_SOLID,10,RGB(255,0,0));Cpen*SelectObject(Cpen*pPen);Cpen*poldPen=pDc->SeclectObject(&pen1);函數(shù)原形選入畫筆21第21頁,課件共33頁,創(chuàng)作于2023年2月2.

畫刷的使用

構(gòu)造一支畫刷:

CBrush();CBrush(COLORREFcrColor);CBrush(intnIndex,COLORREFcrColor);

風格

HS_VERTICAL垂直陰影線

HS_HORIZONTAL水平陰影線

選入畫刷:

CBrush*Brush;Brush=NewBrush(RGB(255,0,0));CBrush*poldBrush=pDc->SelectObject(&Brush);22第22頁,課件共33頁,創(chuàng)作于2023年2月3.在繪圖過程中使用畫筆對象

voidCmyTestView::OnDraw(CDC*PDC){CmyTestDoc*PDoc=GetDocument();//得到文檔指針獲得數(shù)據(jù)

ASSERT_VALID(PDoc);

//todo:adddrawcodefornativedatahereintposition=0,x;for(x=1;x<=11;x++){CPenPen(PS_SOLID,x*2+1,RGB(0,255,0));CPen*oldPen=PDC→SelectObject(&Pen);position+=x*2+10;PDC→MoveTo(20,position);PDC→LineTo(400,position);PDC→SelectObject(oldPen);}}

23第23頁,課件共33頁,創(chuàng)作于2023年2月24第24頁,課件共33頁,創(chuàng)作于2023年2月

4.

在繪圖過程中使用畫刷對象

25第25頁,課件共33頁,創(chuàng)作于2023年2月26第26頁,課件共33頁,創(chuàng)作于2023年2月

①.曲線

voidCMyView::OnCurve(){ //TODO:Addyourcommandhandlercodehere CClientDC*pdc=newCClientDC(this); Cpenpen; pen.CreatePen(PS_SOLID,5,RGB(250,0,0)); CPen*oldpen=(CPen*)pdc->SelectObject(&pen); constdoublePI=3.14159; inti,cx=10,x2=50,y2,m=35,k; doublef,dt,t,q,a[100]; k=m/2; f=30.0; dt=0.004;8.6畫刷與畫筆的應(yīng)用27第27頁,課件共33頁,創(chuàng)作于2023年2月

f

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論