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

下載本文檔

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

文檔簡介

圖形程序設計1第一頁,共三十三頁,編輯于2023年,星期二

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

CDC類提供了對設備描述表進行操作的成員函數(shù)以及對窗口有關描述表進行操作的成員函數(shù)。用提供的函數(shù)對設備描述表進行操作,繪圖工具的使用,圖形界面的選擇、顏色及調(diào)色板的操作。取得繪圖的屬性、映射方式、視口及窗口的操作、坐標轉換等。2第二頁,共三十三頁,編輯于2023年,星期二

CDC

CPaintDC

CClientDC

CWindowDC

CMetaFileDC

CPreviewDC

Cobject打印預覽輸出類CDC的子類3第三頁,共三十三頁,編輯于2023年,星期二

CDC的派生類:

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

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

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

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

CwindowDC類提供一個設備環(huán)境、以便成員函數(shù)在包括非客戶區(qū)在內(nèi)的整個屏幕區(qū)的繪圖。(GetwindowDC,ReleaseDC建立與釋放句柄)4第四頁,共三十三頁,編輯于2023年,星期二

④CMetaFileDC類

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

構造對象,調(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類應用在OnPaint函數(shù)中,以響應windows的WM_PAINT消息,自動實現(xiàn)作圖。

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

5第五頁,共三十三頁,編輯于2023年,星期二

CClientDCCWindowDC6第六頁,共三十三頁,編輯于2023年,星期二

3.繪圖類的引用方法

①CDC類

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

CpaintDCdc(this);

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

CClientDC類

CClientDCdc(this);

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

7第七頁,共三十三頁,編輯于2023年,星期二

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第八頁,共三十三頁,編輯于2023年,星期二voidCMyView::OnDraw(CDC*pDC){CClientDCdc(this);

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

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

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

Ex07aFont.lfHeight=8;結構體成員中字體高度

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

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

Ex07aFont.lfOrientation=0;字體的角度

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

Ex07aFont.lfItalic=0;斜體字體

Ex07aFont.lfUnderline=0;下劃線字體

Ex07aFont.lfStrikeOut=0;刪除線的字12第十二頁,共三十三頁,編輯于2023年,星期二

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第十三頁,共三十三頁,編輯于2023年,星期二

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

pDC->SetBkMode(TRANSPARENT);置模式

pDC->TextOut(20,position,"成都理工大學"); pDC->SelectObject(oldFont);}} 14第十四頁,共三十三頁,編輯于2023年,星期二

15第十五頁,共三十三頁,編輯于2023年,星期二8.4畫筆對象

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

CGdiObject

CBitmap

CBrush

CFont

CPalette

CPen

CRgn20第二十頁,共三十三頁,編輯于2023年,星期二1.畫筆的使用

構造一支畫筆

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

風格寬度顏色

Cpenpen1(PS_SOLID,10,RGB(255,0,0));Cpen*SelectObject(Cpen*pPen);Cpen*poldPen=pDc->SeclectObject(&pen1);函數(shù)原形選入畫筆21第二十一頁,共三十三頁,編輯于2023年,星期二2.

畫刷的使用

構造一支畫刷:

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

風格

HS_VERTICAL垂直陰影線

HS_HORIZONTAL水平陰影線

選入畫刷:

CBrush*Brush;Brush=NewBrush(RGB(255,0,0));CBrush*poldBrush=pDc->SelectObject(&Brush);22第二十二頁,共三十三頁,編輯于2023年,星期二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第二十三頁,共三十三頁,編輯于2023年,星期二24第二十四頁,共三十三頁,編輯于2023年,星期二

4.

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

25第二十五頁,共三十三頁,編輯于2023年,星期二26第二十六頁,共三十三頁,編輯于2023年,星期二

①.曲線

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畫刷與畫筆的應用27第二十七頁,共三十三頁,編輯于2023年,星期二

for(i=1;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論