版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課題: 第六章Windows 的圖形設(shè)備接口及windows 繪圖目的要求:windows 圖形輸出的原理 把握設(shè)備環(huán)境類的概念與使用 把握基本繪圖工具的使用 教學(xué)重點:圖形輸出原理,繪圖工具的使用 教學(xué)難點:圖形輸出原理 教學(xué)課時:4 教學(xué)方法:講練結(jié)合 教學(xué)內(nèi)容與步驟:一、 Windows 繪圖過程與設(shè)備無關(guān)性圖形設(shè)備接口GDI :治理 Windows 應(yīng)用程序圖形的繪制,在應(yīng)用程序中, 通過調(diào)用 GDI函數(shù)繪制不同尺寸、顏色、風(fēng)格的幾何圖形、文本和位圖;這些圖形處理函數(shù)組成了圖形設(shè)備接口 GDI ;是形成 Windows 核心的三種動態(tài)鏈接庫之一:user.dll, windows.dl
2、l, 設(shè)備環(huán)境 DC也稱設(shè)備描述表或設(shè)備上下文,設(shè)備環(huán)境中的 “設(shè)備 ”是指任何類型的顯示器或打印機等輸出設(shè)備;從根本上來說,設(shè)備環(huán)境 DC 是一個由 Windows 治理的一個數(shù)據(jù)結(jié)構(gòu),它儲存了繪圖操作中一些共同需要設(shè)置的信息,如當(dāng)前的畫筆、畫刷、字體和位圖等圖形對象及其屬性, 以及顏色和背景等影響圖形輸出的繪圖模式;并實現(xiàn)應(yīng)用程序、設(shè)備驅(qū)動程序和輸出設(shè)備之間繪圖命令的轉(zhuǎn)換;形象地說, 一個設(shè)備環(huán)境供應(yīng)了一張畫布和一些繪畫的工具,我們可以使用不同顏色的工具在上面繪制點、線、圓和文本;繪圖過程: 圖形設(shè)備接口 GDI 處于設(shè)備驅(qū)動程序的上一層,當(dāng)程序調(diào)用繪圖函數(shù)時,GDI將繪圖命令傳送給當(dāng)前設(shè)
3、備的驅(qū)動程序,以調(diào)用驅(qū)動程序供應(yīng)的接口函數(shù);驅(qū)動程序的接口函數(shù)將 Windows 繪圖命令轉(zhuǎn)化為設(shè)備能夠執(zhí)行的輸出命令,實現(xiàn)圖形的繪制;不同設(shè)備具 有不同的驅(qū)動程序,設(shè)備驅(qū)動程序是設(shè)備相關(guān)的;設(shè)備無關(guān)性:是指操作系統(tǒng)屏蔽了硬件設(shè)備的差異,使用戶編程時一般無需考慮設(shè)備的類型,如不同種類的顯示器或打印機;簡潔而言: GDI 繪圖語句的設(shè)備無關(guān)性;MFC 與 SDK 編程:MFC 將 GDI 函數(shù)和繪圖對象封裝在一個名為 CDC 的設(shè)備環(huán)境類中,因此我們可以通過調(diào)用 CDC 類的成員函數(shù)來完成繪圖操作 . SDK 編程:通過設(shè)備環(huán)境調(diào)用系統(tǒng)供應(yīng)的 GDI 函數(shù)和繪圖函數(shù)來完成繪圖過程;獵取設(shè)備環(huán)境
4、DC的方法:兩種編程方式采納 SDK方法編程,獵取 DC的方法有兩種:在 WM_PAINT消息處理函數(shù)中通過調(diào)用 API函數(shù) BeginPaint 獵取設(shè)備環(huán)境在其他函數(shù)中通過調(diào)用 API 函數(shù) GetDChwnd 獵取設(shè)備環(huán)境,分別用 EndPaint HWND hwnd, PAINTSTRUCT &ps 和 ReleaseDC(hwnd)釋放設(shè)備環(huán)境;采納 MFC方法編程,在程序中通過聲明一個 MFC設(shè)備環(huán)境類的對象就自動獵取了一個DC,當(dāng)該對象被銷毀時就自動釋放了獵取的 DC;主要有三種方式定義 DC 對象:1,CDC pdcthis; 2,CClientDC pdcthis; 3,CP
5、aintDC pdcthis CDC類既作為其它 MFC設(shè)備環(huán)境類的基類,又可以作為一個一般的設(shè)備環(huán)境類使用;利用它可以拜訪設(shè)備屬性和設(shè)置繪圖屬性;CDC類對 GDI 的全部繪圖函數(shù)進(jìn)行了封裝;CPaintDC 類是 OnPaint 函數(shù)使用的設(shè)備環(huán)境類,它代表一個窗口的繪圖畫面;假如添 加 WM_PAINT消息處理函數(shù) OnPaint ,就需要使用 CPaintDC 類來定義一個設(shè)備環(huán)境對象;CClientDC 類代表了客戶區(qū)設(shè)備環(huán)境;當(dāng)在客戶區(qū)實時繪圖時,需要利用 CClientDC 類 定義一個客戶區(qū)設(shè)備環(huán)境;CWindowDC類代表了整個程序窗口設(shè)備環(huán)境,可以在整個窗口區(qū)域繪圖;二,
6、GDI 坐標(biāo)系和映射模式:GDI 支持這兩種坐標(biāo)系;一般而Windows 坐標(biāo)系分為規(guī)律坐標(biāo)系和設(shè)備坐標(biāo)系兩種,言, GDI 的文本和圖形輸出函數(shù)使用規(guī)律坐標(biāo),而在客戶區(qū)移動或按下鼠標(biāo)的鼠標(biāo) 位置是采納設(shè)備坐標(biāo);規(guī)律坐標(biāo)系是面對 DC 的坐標(biāo)系,這種坐標(biāo)不考慮詳細(xì)的設(shè)備類型,在繪圖時,Windows 會依據(jù)當(dāng)前設(shè)置的映射模式將規(guī)律坐標(biāo)轉(zhuǎn)換為設(shè)備坐標(biāo);設(shè)備坐標(biāo)系是面對物理設(shè)備的坐標(biāo)系,這種坐標(biāo)以像素或設(shè)備所能表示的最小長度單位為單位, X 軸方向向右, Y 軸方向向下;設(shè)備坐標(biāo)系的原點位置0, 0不限定在設(shè)備顯示區(qū)域的左上角; 設(shè)備坐標(biāo)系分為屏幕坐標(biāo)系、系;窗口坐標(biāo)系和客戶區(qū)坐標(biāo)系三種相互獨立的
7、坐標(biāo)屏幕坐標(biāo)系以屏幕左上角為原點,一些與整個屏幕有關(guān)的函數(shù)均采納屏幕坐標(biāo),如GetCursorPos、SetCursorPos、 CreateWindow 、MoveWindow;彈出式菜單使用的也是屏幕坐標(biāo);窗口坐標(biāo)系以窗口左上角為坐標(biāo)原點,它包括窗口標(biāo)題欄、菜單欄和工具欄等范疇;客戶區(qū)坐標(biāo)系以窗口客戶區(qū)左上角為原點,主要用于客戶區(qū)的繪圖輸出和窗口消息的處理;鼠標(biāo)消息的坐標(biāo)參數(shù)使用客戶區(qū)坐標(biāo),坐標(biāo)對應(yīng)的規(guī)律坐標(biāo);坐標(biāo)之間的相互轉(zhuǎn)換:CDC類繪圖成員函數(shù)使用與客戶區(qū)MFC 供應(yīng)了兩個函數(shù) CWnd:ScreenToClient 和 CWnd:ClientToScreen 用于屏幕坐標(biāo)與客戶區(qū)坐
8、標(biāo)的相互轉(zhuǎn)換;MFC 供應(yīng)了兩個函數(shù) 間的相互轉(zhuǎn)換;CDC:DPtoLP 和 CDC: LPtoDP 用于設(shè)備坐標(biāo)與規(guī)律坐標(biāo)之映像模式(設(shè)備環(huán)境類對象調(diào)用其成員設(shè)置窗口映像模式)設(shè)置窗口映像模式:映像模式定義了將規(guī)律單位轉(zhuǎn)化為設(shè)備的度量單位以及設(shè)備的x 方向和 y 方向,程序員可在一個統(tǒng)一的規(guī)律坐標(biāo)系中操作而不必考慮輸出設(shè)備的坐標(biāo)系情形映射模式 規(guī)律單位 坐標(biāo)系設(shè)定MM_TEXT 一個像素 X軸正方向朝右, Y軸正方向朝下MM_LOMETRIC 0.1毫米 X軸正方向朝右, Y軸正方向朝上MM_HIMETRIC 0.01毫米 X軸正方向朝右, Y軸正方向朝上MM_LOENGLISH 0.01英
9、寸 X軸正方向朝右, Y軸正方向朝上MM_HIENGLISH 0.001英寸 X軸正方向朝右, Y軸正方向朝上MM_TWIPS 1/1440 英 X軸正方向朝右, Y軸正方向朝上寸MM_ISOTROPIC 系統(tǒng)確定 X、Y軸可任意調(diào)劑, X 、Y軸比例為 1:1 MM_ANISOTROC 系統(tǒng)確定 X、Y軸可任意調(diào)劑, X、Y軸比例任意設(shè)置原點:視口的缺省原點和窗口的缺省原點均為(0,0)通過調(diào)用函數(shù) CDC:SetWindowOrg 設(shè)置設(shè)備環(huán)境的 窗口原點 的坐標(biāo),調(diào)用CDC:SetViewportOrg 重新設(shè)置設(shè)備的視口原點 的坐標(biāo); 窗口: 對應(yīng)規(guī)律坐標(biāo)系上程序員設(shè)定的區(qū)域,視口:對
10、應(yīng)實際輸出設(shè)備上程序員設(shè)定的區(qū)域窗口原點是指規(guī)律窗口坐標(biāo)系的原點在視口(設(shè)備) 坐標(biāo)系中的位置,視口原點是指設(shè)備實際輸出區(qū)域的原點;除了映射模式,窗口和視口也是打算一個點的規(guī)律坐標(biāo)如何轉(zhuǎn)換為設(shè)備坐標(biāo)的一個因素;一個點的規(guī)律坐標(biāo)依據(jù)如下式子轉(zhuǎn)換為設(shè)備坐標(biāo):設(shè)備(視口)坐標(biāo)= 規(guī)律坐標(biāo) 窗口原點坐標(biāo)+ 視口原點坐標(biāo)繪圖模式: 1,規(guī)律坐標(biāo)映射為設(shè)備坐標(biāo)(設(shè)置原點);2,直接在設(shè)備坐標(biāo)中繪圖;坐標(biāo)映射: 設(shè)坐標(biāo)方向為向右,向下,SetWindowOrg50 ,50,就:規(guī)律坐標(biāo)(50,50)映射為設(shè)備坐標(biāo)(0,0);即規(guī)律坐標(biāo)中圖形向左向上進(jìn)行了平移;故窗口原點的設(shè)置原就:設(shè)為與要移動方向相反方向;
11、規(guī)律坐標(biāo) 設(shè)備坐標(biāo)A0,0 A50,50 例: 填空:將如上圖中規(guī)律坐標(biāo)中圖形移到設(shè)備坐標(biāo)中相應(yīng)位置,就:SetWindowOrg _, _ 例 分別在 OnDraw 函數(shù)中添加如下代碼,設(shè)置不同的窗口原點和視口原點,結(jié)果有什么不同;(1)pDC-SetMapModeMM_TEXT; pDC-RectangleCRect50, 50, 100, 100; (2)pDC-SetMapModeMM_TEXT; pDC-SetWindowOrg50, 50; pDC-RectangleCRect50, 50, 100, 100; (3)pDC-SetMapModeMM_TEXT; pDC-SetVi
12、ewportOrg50,50; pDC-RectangleCRect50, 50, 100, 100; (4)pDC-SetMapModeMM_TEXT; pDC-SetViewportOrg50,50; pDC-SetWindowOrg50, 50; pDC-RectangleCRect50, 50, 100, 100; 設(shè)備環(huán)境類對象的其它成員函數(shù):顏色設(shè)置設(shè)置背景色的成員函數(shù) CDC:SetBkColor 設(shè)置文本顏色的成員函數(shù) CDC:SetTextColor ;例如:COLORREF rgbBkClr=RGB192,192,192; / 定義灰色pDC-SetBkCorlorrgbB
13、kClr; / 背景色為灰色pDC-SetTextColorRGB0,0,255; / 文本顏色為蘭色說明:Windows 用 COLORREF 類型 的數(shù)據(jù)存放顏色,它是一個 32 位整數(shù);任何一種顏色都是由紅、綠、藍(lán)三種基本顏色組成,COLORREF 類型數(shù)據(jù)的低位字節(jié)存放紅色強度值,第 2 個字節(jié)存放綠色強度值,第3 個字節(jié)存放藍(lán)色強度值,高位字節(jié)為0,每一種顏色重量的取值范疇為0 到 255;直接設(shè)置 COLORREF 數(shù)據(jù)不太便利,Windows 供應(yīng)了 RGB 宏用于設(shè)置顏色,將其中的紅、綠、藍(lán)重量值轉(zhuǎn)換為 COLORREF 類型的顏色數(shù)據(jù): RGBbyRed, byGreen,
14、byBlue ,其中參數(shù) byRed、byGreen 和 byBlue 分別表示紅、綠、藍(lán)重量值(范疇 0 到 255);紅色值: RGB255 ,0, 0 藍(lán)色值: RGB0,255,0 綠色值: RGB0,0,255 三、 GDI 對象:GDI 對象是 Windows 圖形設(shè)備接口的抽象繪圖工具;除了畫筆和畫刷,其它 GDI 對象仍包括字體、位圖和調(diào)色板;MFC 對 GDI 對象進(jìn)行了很好的封裝,供應(yīng)了封裝 GDI 對象的類,如 CPen、CBrush、CFont、CBitmap 和 CPalette 等,這些類都是GDI 對象類 CGdiObject 的派生類;CDC 類供應(yīng)了成員函數(shù)
15、SelectObject挑選用戶自己創(chuàng)建的 GDI 對象;該函數(shù)有多種重載形式,可以挑選用戶已定制好的畫筆、畫刷、字體和位圖等不同類型的 GDI 對象;CPen* SelectObjectCPen* pPen; CPen *poldpen=pdc. SelectObject&pen; CBrush* SelectObjectCBrush* pBrush; virtual CFont* SelectObjectCFont* pFont; 繪圖輸出的一般過程:1, 創(chuàng)建設(shè)備環(huán)境對象, CClientDC pdcthis; 2, 創(chuàng)建 GDI 對象(繪圖工具),CPen pen; pen.Creat
16、GetStockObject(BLACK_PEN );3, 設(shè)備環(huán)境對象挑選某些 GDI 對象, pdc. SelectObject&pen;4, 設(shè)備環(huán)境對象使用 GDI 對象調(diào)用繪圖函數(shù)輸出;pdc.ellipse; 1 畫筆的創(chuàng)建第一步:使用畫筆之前必需事先定義一個畫筆對象(API :句柄)形式如下:CPen pen /HPEN hP; 其次步:然后調(diào)用成員函數(shù) CreatStockObject 獵取 Windows 系統(tǒng)定義的四種畫筆或 創(chuàng)建用戶自定義新畫筆;獵取系統(tǒng)畫筆BLACK_PEN的形式如下:/hP=GetStockObject (BLACK_PEN ) ; pen.Creat
17、GetStockObject(BLACK_PEN ); 畫筆樣式: WHITE_PEN ,BLACK_PEN ,DC_PEN, NULL_PEN 創(chuàng)建新畫筆,形式如下:Font. CreatePen .; /hP=CreatePen (int nPenStyle, /確定畫筆樣式int nWidth, /畫筆寬度COLORREF rgbColor / 畫筆顏色); 畫筆樣式有:PS_DASH :虛線PS_DASHDOT :點劃線PS_DASHDOTDOT : 雙點劃線PS_DOT:點線PS_INSIDEFRAME :實線PS_NULL :無PS_SOLID :實線注:不再使用當(dāng)前畫筆時,需刪除
18、畫筆,以免占內(nèi)存2 font.DeleteObject API 中: DeleteObjecthP; 畫刷的創(chuàng)建第一步:使用畫刷需事先定義一個畫刷類對象;形式如下:/ HBRUSH hBr; /hBr 為畫刷句柄CBrush brush; 其次步:然后調(diào)用函數(shù) CreateStockObject 獵取 Windows 系統(tǒng)供應(yīng)的 7 種畫刷/ hBr= (HBRUSH )GetStockObjectnBrushStyle )畫刷樣式brush. CreateStockObjectnBrushStyle 畫刷樣式: BLACK_BRUSH 黑色畫刷, DKGRAY_BRUSH 深灰色畫刷GRAY
19、_BRUSH 灰色畫刷, HOLLOW_BRUSH 虛畫刷LTGRAY_BRUSH 亮灰色畫刷, NULL_BRUSH 空畫刷WHITE_BRUSH 白色畫刷指定顏色畫刷如何獲得?可調(diào)用函數(shù) CreateSolidBrush 和 CreateHatchBrush 創(chuàng)建具有指定顏色的單色畫刷,創(chuàng)建指定陰影圖案和顏色的畫刷;brush. CreateSolidBrushrgbColor; 注: 刪除畫刷;不使用畫刷時,可用 brush. DeleteObject; 刪除畫刷,釋放內(nèi)存四、 常用繪圖函數(shù)(由設(shè)備環(huán)境類對象 CClient pdcthis 調(diào)用1設(shè)置畫筆當(dāng)前位置的函數(shù) MoveToEx
20、 ,/ pdc. MoveToEx / BOOL MoveToEx / HDC hdc, int X,Y , / X 、Y 分別為新位置的規(guī)律坐標(biāo)LPPOINT lpPoint / 存放原畫筆位置的 POINT 結(jié)構(gòu)地址 2 從當(dāng)前位置向指定坐標(biāo)點畫直線的函數(shù) LineToEx ,BOOL LineToExHDC hdc,int X,int Y /X 和 Y 為線段的終點坐標(biāo)3 從 當(dāng) 前 位 置 開 始 , 依 次 用 線 段 連 接 lpPoints 中 指 定 的 各 點 . pdc. Polyline / BOOL Polyline / HDC hdc, LPPOINT lpPoint
21、s, /指向包含各點坐標(biāo)的 POINT 結(jié)構(gòu)數(shù)組的指針int nCount / nCount 為 POINT 數(shù)組中點的個數(shù) 4 繪制橢圓弧線的函數(shù) Arc ,BOOL Arc HDC hdc, int X1,intY1, /邊框矩形左上角的規(guī)律坐標(biāo)int X2,int Y2, /邊框矩形右下角的規(guī)律坐標(biāo)int X3,int Y3, /橢圓弧起始點坐標(biāo)int X4,int Y4 /橢圓弧終止點坐標(biāo) 5 繪制餅圖,并用當(dāng)前畫刷進(jìn)行填充BOOL Pie HDC hdc, int X1,intY1, /邊框矩形左上角的規(guī)律坐標(biāo)int X2,int Y2, /邊框矩形右下角的規(guī)律坐標(biāo)int X3,in
22、t Y3, /橢圓弧起始經(jīng)線的確定點坐標(biāo)int X4,int Y4 /橢圓弧終止經(jīng)線的確定點坐標(biāo) 6 繪制矩形,并用當(dāng)前畫刷進(jìn)行填充 BOOL RectangleHDC hdc,int X1,int Y1,int X2,int Y2 X1 ,Y1 )和 X2 ,Y2)分別為矩形的左上角和右下角的規(guī)律坐標(biāo) 7 繪制圓角矩形,并用當(dāng)前畫刷填充BOOL RoundRect HDC hdc,int X1,int Y1,int X2,int Y2, int nHeight, int nWidth 圓角的高度和寬度8 繪制橢圓,并用當(dāng)前畫刷填充 BOOL EllipseHDC hdc,intX1,intY
23、1,intX2,intY2 9繪制多邊形,并用當(dāng)前畫刷填充 BOOL PolygonHDC hdc,LPPOINT lpPoints,int nCount 包含各點坐標(biāo)的 POINT 數(shù)組的地址多邊形點的個數(shù)四、 應(yīng)用實例【例】 利用繪圖函數(shù)創(chuàng)建填充區(qū);共有三個填充圖形,第一個是用深灰色畫刷填充帶圓角的矩形,其次個是采納亮灰色畫刷填充一個橢圓型圖,第三個是用虛畫刷填充餅形圖;使用虛畫刷填充時,看不出填充成效 . draw1Dlg.cpp void CDraw1Dlg:OnPaint if IsIconic . else CDialog:OnPaint; CClientDC pdcthis; C
24、Rect rc; this-GetClientRect&rc; pdc.Rectanglerc.left,rc.top,rc.right,rc.bottom; CPen pen; CBrush brush,brush1; pdc.SetMapModeMM_ANISOTROPIC; / 設(shè) 置 映 像 模 pen.CreateStockObjectBLACK_PEN; /GetStockObjectBLACK_PEN; /黑色畫筆 brush.CreateStockObjectDKGRAY_BRUSH; / GetStockObjectDKGRAY_BRUSH; / 畫刷 pdc.SelectO
25、bjectbrush; /挑選畫刷 hDC, pdc.SelectObjectpen; /挑選畫筆 hDC, pdc.RoundRect50,120,100,200,15,15; /繪制圓 角矩形brush1.CreateStockObjectLTGRAY_BRUSH; /采納亮灰色畫刷 pdc.SelectObjectbrush1; /挑選畫刷 pdc.Ellipse150,50,200,150; /繪制橢圓 brush.CreateStockObjectHOLLOW_BRUSH; / 虛畫刷 pdc.SelectObjectbrush; /挑選畫刷 pdc.Pie250,50,300,10
26、0,250,50,300,50; /繪制餅形 動態(tài)圖形:用戶區(qū)窗口圖形的刷新:常用用戶區(qū)窗口刷新機制:當(dāng)用戶區(qū)的內(nèi)容需要刷新時,系統(tǒng)向應(yīng)用程序消息隊列發(fā)送WM_PAINT 消息,系統(tǒng)在應(yīng)用程序的消息隊列中加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理;應(yīng)用程序接收到該消息后,調(diào)用 刷新懇求的兩種方式:On_Paint 函數(shù)實現(xiàn)窗口圖形的重畫;以下大事,系統(tǒng)會自動窗口刷新懇求:用戶區(qū)移動或顯示,用戶窗口大小轉(zhuǎn)變,程序通過滾動條滾動窗口, 窗口被另一個窗口掩蓋的,復(fù)原如下拉式菜單關(guān)閉等,光標(biāo)穿過用戶區(qū),圖標(biāo)拖過用戶區(qū);用戶的刷新懇求:調(diào)用窗口類函數(shù):Invalidatetrue 或 InvalidateR
27、ect 【例】 編寫一個程序, 在屏幕上顯現(xiàn)一個圓心沿正弦曲線軌跡移動的實心圓,而且,每隔四分之一周期, 圓的填充色和圓的周邊顏色都發(fā)生變化,由正弦曲線幅值的 0.2 倍至 0.6 倍線性增長;同時, 圓的半徑在四分之一周期之內(nèi)1 正弦曲線的表示:窗口初始化時,生成正弦曲線各點的坐標(biāo);把正弦曲線一個周期的橫坐標(biāo)分成 100 個等分點,儲備在數(shù)組lpSin100 中, 100 個點的坐標(biāo)運算如下:forint j=0;j100;j+ /生成正弦曲線的點坐標(biāo) /POINT psSin100 lpSinj.x=longj*2*Pi/100*60;/ 正弦曲線寬放大 60 倍 lpSinj.y=lon
28、gdfRange*sinj*2*Pi/100; 高放大 dfRange=100 倍2 動態(tài)顯示圓在正弦曲線上移動 數(shù)組 lpSin100 的長度為 100,設(shè)定圓在正弦曲線移動時共有 100 個位置 數(shù)組中每一個值是圓移動時圓心的坐標(biāo),每四分之一周期有 25 個位置i=25 處于第 1 個 1/4 周期,創(chuàng)建紅色畫筆和畫刷;25i50 處于第 2 個 1/4 周期,創(chuàng)建綠色畫筆和畫刷;50i75 處于第 3 個 1/4 周期,創(chuàng)建藍(lán)色畫筆和畫刷;75i100 處于第 4 個 1/4 周期,創(chuàng)建黃色畫筆和畫刷;CPen pen;Cbrush brush; ifi=25 /第一個 1/4 周期 /
29、hPen=CreatePenPS_DASH,1,RGB255,0,0; pen. CreatePenPS_DASH,1,RGB255,0,0; /hBrush=CreateHatchBrushHS_BDIAGONAL,RGB255,0,0; brush. CreateHatchBrushHS_BDIAGONAL,RGB255,0,0; lRadious=longdfRange*0.2+i%25*dfRange*0.4/25;/ 運算半徑 在消息 WM_PAINT處理程序中, 由此經(jīng)過線性差分運算圓半徑的大小lRadious ,第 1 個 1/4周期的程序代碼如下:創(chuàng)建的畫筆和畫刷選入設(shè)備環(huán)境后
30、,調(diào)用函數(shù) Ellipse 繪制圓形3動態(tài)顯示的關(guān)鍵:Sleep100; /停 0.1 秒; 調(diào)用 Sleep100函數(shù)使程序暫停0.1 秒;所含參數(shù)100代表暫停的時間,使用毫秒作單位;ifi100 InvalidateRecthWnd,NULL,1; /刷新用戶區(qū);i100 時調(diào)用函數(shù)刷新用戶區(qū) 發(fā)送 WM_PAINT 消息,刷新整個用戶區(qū),清除用戶區(qū)中全部的顯示內(nèi)容 詳細(xì)操作:一,定義變量:class CTuyuanDlg : public CDialog / Construction public: CTuyuanDlgCWnd* pParent = NULL; public: / s
31、tandard constructor double dfTheta,dfRange; /正弦曲線的寬高放大倍數(shù). long i,j; long lCentreX,lCentreY,lRadious; /定義圓心坐標(biāo)和圓半徑 . POINT lpSin100; /定義正弦曲線的點坐標(biāo) . ,做為該類的成員;位置:在對話框類對象定義中(即頭文件中)或在 CText1Dlg.h 加入 二,初始化變量:頭文件中: #define pi 3.14159 編譯文件中: #inlcude “ math.h”dfTheta=60, dfRange=100.0; /正弦曲線的寬高放大倍數(shù). i=0,j=0;
32、lCentreX=0,lCentreY=0,lRadious=long0.2*dfRange; forint j=0;j100;j+ /生成正弦曲線的點坐標(biāo) lpSinj.x=longj*2*Pi/100*dfTheta; lpSinj.y=longdfRange*sinj*2*Pi/100; 位置:在對話框類對象的構(gòu)造函數(shù)或初始化函數(shù)中:三,繪圖:CText1Dlg:OnInitDialog 位置:在對話框類對象的繪圖函數(shù)中:void CText1Dlg:OnPaint CClientDC pdcthis; CPen pen,*mypen, pen1; CBrush brush,*mybrush; pdc.SetWindowOrg-50,-150; /pdc.SetWindowExt-200,-200;/ 設(shè)置原點坐標(biāo) pen1.CreatePenPS_DASH,1,RGB255,0,0; /建新畫筆 /選入畫筆 mypen=pdc.SelectObject&pen1; pdc.PolylinelpSin,100; / fabssini*2*Pi/100 *dfRange*0.4 ifi=25 /
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新進(jìn)員工質(zhì)量意識培訓(xùn)
- 信用社人力資源新工培訓(xùn)
- 數(shù)控車削加工技術(shù) 課件 項目二 制定數(shù)控車削工藝
- 山東省淄博市第一中學(xué)2024-2025學(xué)年高三上學(xué)期期中考試語文試卷含答案
- T-YNZYC 0079-2023 綠色藥材 蜘蛛香栽培技術(shù)規(guī)程
- T-YNRZ 025-2024 瓜類蔬菜育苗技術(shù)規(guī)程
- 廣西桂林市永??h2024-2025學(xué)年上學(xué)期八年級數(shù)學(xué)期中考試卷(無答案)
- 區(qū)域經(jīng)濟(jì)發(fā)展
- 高考?xì)v史二輪復(fù)習(xí)通史版選修四中外歷史人物評說課
- 2024年山東省臨沂市中考英語試題含解析
- 生日快樂祝??扉Wppt
- 幼兒園報名登記表
- 蘇教版二年級數(shù)學(xué)上冊重難點易錯題積累
- 《伏安法測電阻》實驗報告單
- 九年級數(shù)學(xué)上冊第23章旋轉(zhuǎn)學(xué)案(無答案)(新版)新人教版
- 50430建工審核員考試題匯總-帶答案.doc
- 經(jīng)緯度計算和轉(zhuǎn)換工具
- “新生杯”三人制籃球賽比賽計分表
- 鋼絲網(wǎng)骨架聚乙烯復(fù)合管道施工手冊
- 安安全全用剪刀PPT課件
- 動物細(xì)胞培養(yǎng)技術(shù).ppt
評論
0/150
提交評論