MFC系列教程PPT2_第1頁
MFC系列教程PPT2_第2頁
MFC系列教程PPT2_第3頁
MFC系列教程PPT2_第4頁
MFC系列教程PPT2_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 (2) 與與MFC圖形操作有關(guān)圖形操作有關(guān) 的類及主要函數(shù)的類及主要函數(shù) 2 . 繪圖類繪圖類 1繪圖類繪圖類CDC (設(shè)備環(huán)境類(設(shè)備環(huán)境類, Cobject的子類)的子類) CDC類提供了對設(shè)備描述表進行操作的成員函數(shù)以及對窗類提供了對設(shè)備描述表進行操作的成員函數(shù)以及對窗 口有關(guān)描述表進行操作的成員函數(shù)。口有關(guān)描述表進行操作的成員函數(shù)。 用提供的函數(shù)對設(shè)備描述表進行操作,繪圖工具的使用,用提供的函數(shù)對設(shè)備描述表進行操作,繪圖工具的使用, 圖形界面的選擇、顏色及調(diào)色板的操作。圖形界面的選擇、顏色及調(diào)色板的操作。 取得繪圖的屬性、映射方式、視口及窗口的操作、坐標轉(zhuǎn)取得繪圖的屬性、映射方式、

2、視口及窗口的操作、坐標轉(zhuǎn)換等。換等。 CDC的子類的子類:3 CDC CPaintDC CClientDC CWindowDC CMetaFileDC CPreviewDC Cobject打印預(yù)覽輸出類打印預(yù)覽輸出類 響應(yīng)消息完成客戶區(qū)繪圖響應(yīng)消息完成客戶區(qū)繪圖 設(shè)備描述表設(shè)備描述表提供一個設(shè)備環(huán)境提供一個設(shè)備環(huán)境封裝繪圖方法封裝繪圖方法.4 CDC的派生類:的派生類: CpaintDC類類 一般用在函數(shù)一般用在函數(shù)OnPaint( )內(nèi),響應(yīng)內(nèi),響應(yīng)WM_PAINT的消息。的消息。 windows的消息循環(huán)機制一直在采集各種消息,當(dāng)接到的消息循環(huán)機制一直在采集各種消息,當(dāng)接到WM PAINT

3、消息時,自動調(diào)用固定的繪圖函數(shù),使用消息時,自動調(diào)用固定的繪圖函數(shù),使用CpaintDC類對象類對象的成員函數(shù),完成客戶區(qū)繪圖。的成員函數(shù),完成客戶區(qū)繪圖。 (BeginPaint, EndPaint實現(xiàn)句柄建立與釋放實現(xiàn)句柄建立與釋放) CClientDC類類 窗口客戶設(shè)備描述表,對窗口客戶區(qū)的圖形訪問。窗口客戶設(shè)備描述表,對窗口客戶區(qū)的圖形訪問。 (GetDC, ReleaseDC實現(xiàn)句柄建立與釋放實現(xiàn)句柄建立與釋放) CwindowDC類類 提供一個設(shè)備環(huán)境、以便成員函數(shù)在包括非客戶區(qū)在內(nèi)的提供一個設(shè)備環(huán)境、以便成員函數(shù)在包括非客戶區(qū)在內(nèi)的整個屏幕區(qū)的繪圖。整個屏幕區(qū)的繪圖。(Getwi

4、ndowDC, ReleaseDC建立與釋放建立與釋放)5 CMetaFileDC類類 封裝封裝Windows圖元文件中的繪圖方法圖元文件中的繪圖方法. 構(gòu)造對象構(gòu)造對象, 調(diào)用調(diào)用Create函數(shù)函數(shù), 繪圖繪圖: MoveTo, LineTo, ,Close, 返回句柄返回句柄.(CreateEnhanced, CloseEnhanced建立與釋放建立與釋放) 2繪圖類的主要差別繪圖類的主要差別 CwindowDC類與類與CpaintDC 和和CClientDC類的區(qū)別類的區(qū)別 CwindowDC可以在非客戶(窗口)繪制圖形。坐標是全屏幕??梢栽诜强蛻簦ù翱冢├L制圖形。坐標是全屏幕。 Cp

5、aintDC和和CClientDC只能在客戶區(qū)繪制圖形。坐標原點是只能在客戶區(qū)繪制圖形。坐標原點是客戶區(qū)的左上角??蛻魠^(qū)的左上角。 CpaintDC類與類與CClientDC類的區(qū)別類的區(qū)別 都可在客戶內(nèi)作圖,區(qū)別是都可在客戶內(nèi)作圖,區(qū)別是CpaintDC類應(yīng)用在類應(yīng)用在OnPaint函數(shù)函數(shù)中,以響應(yīng)中,以響應(yīng)windows的的WM_PAINT消息,自動實現(xiàn)作圖。消息,自動實現(xiàn)作圖。 CClientDC類可以實現(xiàn)實時繪圖。類可以實現(xiàn)實時繪圖。 6 CClientDCCWindowDC7 3繪圖類的引用方法繪圖類的引用方法 CDC類類 CDC類不能用窗口對象指針初始化對象,類不能用窗口對象指針

6、初始化對象,一般不聲明對象直一般不聲明對象直接應(yīng)用接應(yīng)用。常用于建立內(nèi)存設(shè)備描述對象。常用于建立內(nèi)存設(shè)備描述對象。 OnDraw( CDC *pDC) CpaintDC類類 CpaintDC dc(this); 定義一個定義一個CpaintDC的對象的對象dc,并用當(dāng)前窗口對象指針,并用當(dāng)前窗口對象指針this對對對象對象dc進行初始化。進行初始化。 CClientDC類類 CClientDC dc(this); 定義一個定義一個CClientDC的對象的對象dc,并用當(dāng)前窗口對象指針,并用當(dāng)前窗口對象指針this對對對對象象dc進行初始化。進行初始化。 8 CwindowDC類類 Cwind

7、owDC dc(this); 定義一個定義一個CwindowDC類的對象類的對象dc,并用當(dāng)前窗口對象,并用當(dāng)前窗口對象指針指針this對對dc進行初始化。進行初始化。4. CDC 的部分函數(shù)的部分函數(shù) 繪圖對象的函數(shù)繪圖對象的函數(shù) SetObject( ) 顏色調(diào)色板函數(shù)顏色調(diào)色板函數(shù) SelectPalette( ) 繪圖屬性函數(shù)繪圖屬性函數(shù) SetBkColor( ) 映射函數(shù)映射函數(shù) SetMapMode( ) 繪制線條函數(shù)繪制線條函數(shù) LineTo( ) 置筆位置函數(shù)置筆位置函數(shù) MoveTo( ) 圓狐函數(shù)圓狐函數(shù) Arc( ) 文本顏色函數(shù)文本顏色函數(shù) SetTextColor(

8、 )9 .CView類類 類結(jié)構(gòu)類結(jié)構(gòu) Cobject CCmdtarget CWnd CView Cview 的成員函數(shù)的成員函數(shù) Cview( ) 創(chuàng)建新窗口時,創(chuàng)建新窗口時, 初始化初始化 OnDraw( ) 屏幕顯示,打印預(yù)覽屏幕顯示,打印預(yù)覽 Getdocument( ) 得到文檔指針,調(diào)成員函數(shù)得到文檔指針,調(diào)成員函數(shù) OnUpdate( ) 視類文檔數(shù)據(jù)修改后調(diào)用視類文檔數(shù)據(jù)修改后調(diào)用 OnPrint( ) 打印和打印預(yù)覽時調(diào)用打印和打印預(yù)覽時調(diào)用 為消息服務(wù)為消息服務(wù)類類窗口處理類窗口處理類10 void CMyView:OnDraw( CDC *pDC ) CClientDC

9、 dc(this); dc.TextOut(100, 100, “成都理工大學(xué)圖形輸出成都理工大學(xué)圖形輸出“); . 繪圖類的主要操作功能繪圖類的主要操作功能 1坐標映射方式坐標映射方式 Windows映像方式映像方式 指指 Windows下的邏輯坐標,實際的物理屏幕是由像素組成下的邏輯坐標,實際的物理屏幕是由像素組成的,的,640480表示物理屏幕的高、寬像素目。表示物理屏幕的高、寬像素目。11 映像方式映像方式 映像識別碼映像識別碼 邏輯單位邏輯單位 x和和y正向正向 MM_TEXT 1Pixels(象素象素) 右下右下 MM_LOMETRIC 20.1mm 右上右上 MM_HIMETRI

10、C 30.01mm 右上右上 MM_LONGLISH 40.1inch 右上右上 MM_HIENGLISH 50.01inch 右上右上 MM_TWIPS 61/1440inch 右上右上 MM_ISOTROPIC 7Variable(x = y) 變化變化 MM_ANISOTROPIC 8 Variable(x y) 變化變化 坐標原點都處于左上角,最后一個映像方式的邏輯單位坐標原點都處于左上角,最后一個映像方式的邏輯單位x與與y不同。不同。12 設(shè)置映像方式的方法設(shè)置映像方式的方法 調(diào)用調(diào)用CDC類的函數(shù)類的函數(shù)SetMapMode完成。完成。 CDrawView : OnDraw (CD

11、C * PDC) PDCSetMapMode(n); 其中其中n是映像識別碼。是映像識別碼。 邏輯坐標與設(shè)備坐標的轉(zhuǎn)換邏輯坐標與設(shè)備坐標的轉(zhuǎn)換 DPtoLP(LPPOINT lpPoints); 設(shè)備坐標轉(zhuǎn)邏輯坐標。設(shè)備坐標轉(zhuǎn)邏輯坐標。 LPtoDP(LPPOINT lpPoints); 邏輯坐標轉(zhuǎn)設(shè)備坐標。邏輯坐標轉(zhuǎn)設(shè)備坐標。 例如坐標轉(zhuǎn)換函數(shù)的應(yīng)用例如坐標轉(zhuǎn)換函數(shù)的應(yīng)用 Cpoint point;定義一個點定義一個點 point.x=100;賦值賦值 point.y=100; PDCDPtoLP(&point);將點從設(shè)備坐標轉(zhuǎn)邏輯坐標。將點從設(shè)備坐標轉(zhuǎn)邏輯坐標。13 2窗口視口及

12、有關(guān)函數(shù)窗口視口及有關(guān)函數(shù) 窗口視口:窗口視口: Windows繪圖時,并不是把圖形直接繪制到屏幕上,而是繪圖時,并不是把圖形直接繪制到屏幕上,而是以各種映像方式下的邏輯坐標系將圖形繪制到虛擬窗口中,以各種映像方式下的邏輯坐標系將圖形繪制到虛擬窗口中,然后將這個圖形映像到一個視圖中。然后將這個圖形映像到一個視圖中。 窗口:窗口: 虛擬的屏幕虛擬的屏幕 視口:視口: 實際的視圖實際的視圖14 窗口和視口函數(shù):窗口和視口函數(shù): SetWindowOrg 功能:功能: 設(shè)置一個與設(shè)備環(huán)境有關(guān)的窗口原點。設(shè)置一個與設(shè)備環(huán)境有關(guān)的窗口原點。 CpointSetWindowOrg (int x, int

13、y); CpointSetWindowOrg (POINT point); x,y是新的窗口原點,是新的窗口原點,POINT也確定窗口原點。也確定窗口原點。 函數(shù)返回一個前窗口的原點。函數(shù)返回一個前窗口的原點。 SetViewportOrg 功能:功能: 設(shè)置一個與設(shè)備環(huán)境有關(guān)的視口原點。設(shè)置一個與設(shè)備環(huán)境有關(guān)的視口原點。 CpointSetViewportOrg (int x, int y); CpointSetViewportOrg (POINT point); x,y是新視口原點,是新視口原點,POINT也確定視口原點。也確定視口原點。 函數(shù)返回一個前視口的原點。函數(shù)返回一個前視口的原點

14、。15 SetWindowExt 功能:設(shè)置與設(shè)備環(huán)境有關(guān)的窗口在功能:設(shè)置與設(shè)備環(huán)境有關(guān)的窗口在x,y方向的幅度方向的幅度(范圍范圍)。 virtualCSizeSetWindowExt (int cx, int cy); virtual CSizeSetWindowExt (SIZE size); x,y方向的幅度方向的幅度cx, cy, 或或size。 函數(shù)返回前幅度值。函數(shù)返回前幅度值。 SetViewportExt 功能:設(shè)置與設(shè)備環(huán)境有關(guān)的視口在功能:設(shè)置與設(shè)備環(huán)境有關(guān)的視口在x,y方向的幅度。方向的幅度。 VirtualCSizeSetViewExt (int cx, int c

15、y); VirtualCSizeSetViewExt (SIZE size); cx, cy是是x與與y方向的幅度,或方向的幅度,或size返回視口前幅度。返回視口前幅度。16 設(shè)置窗口、視口原點坐標:設(shè)置窗口、視口原點坐標: PDCSetWindowOrg(a1, b1); PDCSetViewprotOrg(a2, b2); 窗口邏輯坐標窗口邏輯坐標a1,b1映射到視口坐標映射到視口坐標a2,b2,得同一個點的邏輯坐標,得同一個點的邏輯坐標與設(shè)備坐標的對應(yīng)關(guān)系。設(shè)窗口坐標與設(shè)備坐標的對應(yīng)關(guān)系。設(shè)窗口坐標x1,y1,設(shè)備坐標,設(shè)備坐標x2,y2,據(jù)到原點距離相等,可得據(jù)到原點距離相等,可得(

16、y軸同向時軸同向時): (x1-a1)=(x2-a2)*n (y1-b1)=(y2-b2)*n 其中其中n是幅度比值。是幅度比值。17 所以當(dāng)窗口、視口的原點坐標與所以當(dāng)窗口、視口的原點坐標與n都已知時,可得窗口坐標都已知時,可得窗口坐標與視口坐標對應(yīng)關(guān)系。與視口坐標對應(yīng)關(guān)系。 PDCSetMapMode(MM_ANISOTROPIC); PDCSetWindowExt(100, 100); 其中其中x1,y1是幅度是幅度 PDCSetViewportExt(500, 300); 其中其中x2,y2是幅度是幅度 設(shè)窗口、視口原點(設(shè)窗口、視口原點(0, 0), x2:x1=5, y2:y1=3

17、, 在窗口畫一個圓心在在窗口畫一個圓心在(50, 50),r=20的圓,映像到視口是一個橢圓。的圓,映像到視口是一個橢圓。7 x=y18(250,150)(50,50)20100601:51:320窗口窗口視口視口19 void CMYView:OnDraw(CDC *pDC) pDC-SetMapMode(2); 0.1mm/(象素)(象素) pDC-SetViewportOrg(Cpoint(100,100); pDC-Rectangle(Crect(0,0,200,200); (0,0)xyyx(0,0)(100,100)(200,200)(300,300)2cm20 . 常用繪圖函數(shù)常

18、用繪圖函數(shù) 1置背景色置背景色 默認時背景色是白色。默認時背景色是白色。 Virtual COLORREF SetBkColor (COLORREF crcolor); crcolor 是新的背景色是新的背景色 SetBkColor(hdc, RGB( 0, 255, 0); 2置背景模式置背景模式 int SetBkMode (int nBkMode); PDCSetBkMode (TRANSPARENT); 不改變背景色,不改變背景色,OPAQUE時用當(dāng)前背景色。時用當(dāng)前背景色。 在在SetBkcolor函數(shù)后用。函數(shù)后用。 213取得當(dāng)前背景色取得當(dāng)前背景色COLORREF GetBkC

19、olor ( );COLORREF color=PDCGetBkColor( );取得當(dāng)前背景色存取得當(dāng)前背景色存color中。中。4取得當(dāng)前背景模式取得當(dāng)前背景模式intGetBkMode( );intnBkMode=PDCGetBkMode( );5置像素置像素COLORREFSetPixel (int x, int y, COLORREF crcolor);COLORREF SetPixel (POINT point, COLORREF crcolor); x, y, 或或point是像素點坐標,是像素點坐標,crcolor顏色。顏色。226置當(dāng)前位置置當(dāng)前位置置畫線的起始位置。置畫線的

20、起始位置。Cpoint MoveTo (int x, int y);Cpoint MoveTo (POINT point);7畫簡單直線畫簡單直線BOOL LineTo (int x, int y);BOOL LineTo ( POINT point); (ok 非非0)用當(dāng)前選擇的畫筆從當(dāng)前位置到參數(shù)用當(dāng)前選擇的畫筆從當(dāng)前位置到參數(shù) x, y畫一條直線。畫一條直線。8畫弧畫弧BOOL Arc (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);BOOL ArcTo (int x1, int y1, int x2,

21、int y2, int x3, int y3, int x4, int y4); (改變當(dāng)前位置改變當(dāng)前位置)以矩形定義弧的大小,邊界矩形隱藏。以矩形定義弧的大小,邊界矩形隱藏。 23 9矩形矩形 BOOL Rectangle (int x1, int y1, int x2, int y2); 左上角與右下角坐標。左上角與右下角坐標。 10圓角矩形圓角矩形 BOOL RoundRect (int x1, int y1, int x2, int y2, int x3, int y3); 其中其中x3, y3是圓角矩形的寬度與高度。是圓角矩形的寬度與高度。 11橢圓和圓橢圓和圓 BOOL Elli

22、pse (int x1, int y1, int x2, int y2); 由坐標確定橢圓與圓,并用當(dāng)前畫刷充填。由坐標確定橢圓與圓,并用當(dāng)前畫刷充填。2412餅圖餅圖BOOL Pic (int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); 不充填。不充填。13多邊形多邊形BOOL polygon (LPPOINT lppoints, int nCount); 數(shù)組數(shù)組 頂點數(shù)頂點數(shù)14其它繪圖函數(shù)其它繪圖函數(shù)floodFill 用當(dāng)前畫刷填充一個區(qū)域用當(dāng)前畫刷填充一個區(qū)域DrawIcon 在設(shè)備文本對象指定的設(shè)備上畫

23、一個圖標。在設(shè)備文本對象指定的設(shè)備上畫一個圖標。FillRect 用指定畫刷填充一個矩形區(qū)域但不畫邊線用指定畫刷填充一個矩形區(qū)域但不畫邊線FrameRect 用指定畫刷畫一個矩形邊框,不充填用指定畫刷畫一個矩形邊框,不充填I(lǐng)nverRect 對矩形區(qū)反轉(zhuǎn)色。對矩形區(qū)反轉(zhuǎn)色。25. 畫筆與畫刷畫筆與畫刷 (GDI對象中的繪圖)對象中的繪圖) CGdiO bject CBitmap CBrush CFont CPalette CPen CRgn261. 畫筆的使用畫筆的使用 構(gòu)造一支畫筆構(gòu)造一支畫筆 Cpen( ); Cpen(int nPenStyle, int nWidth, COLORREF crColor); 風(fēng)格風(fēng)格 寬度寬度 顏色顏色 Cpen pen1(PS_SOLID, 10, RGB(255,0,0); 選入畫筆選入畫筆 Cpen *selectObject(Cpen *pPen); Cpen *poldPen=pDc-Seclect

溫馨提示

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

評論

0/150

提交評論