版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課題: 第六章Windows 的圖形設(shè)備接口及windows 繪圖目的要求:windows 圖形輸出的原理 把握設(shè)備環(huán)境類的概念與使用 把握基本繪圖工具的使用 教學(xué)重點(diǎn):圖形輸出原理,繪圖工具的使用 教學(xué)難點(diǎn):圖形輸出原理 教學(xué)課時(shí):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 核心的三種動(dòng)態(tài)鏈接庫之一:user.dll, windows.dl
2、l, 設(shè)備環(huán)境 DC也稱設(shè)備描述表或設(shè)備上下文,設(shè)備環(huán)境中的 “設(shè)備 ”是指任何類型的顯示器或打印機(jī)等輸出設(shè)備;從根本上來說,設(shè)備環(huán)境 DC 是一個(gè)由 Windows 治理的一個(gè)數(shù)據(jù)結(jié)構(gòu),它儲(chǔ)存了繪圖操作中一些共同需要設(shè)置的信息,如當(dāng)前的畫筆、畫刷、字體和位圖等圖形對(duì)象及其屬性, 以及顏色和背景等影響圖形輸出的繪圖模式;并實(shí)現(xiàn)應(yīng)用程序、設(shè)備驅(qū)動(dòng)程序和輸出設(shè)備之間繪圖命令的轉(zhuǎn)換;形象地說, 一個(gè)設(shè)備環(huán)境供應(yīng)了一張畫布和一些繪畫的工具,我們可以使用不同顏色的工具在上面繪制點(diǎn)、線、圓和文本;繪圖過程: 圖形設(shè)備接口 GDI 處于設(shè)備驅(qū)動(dòng)程序的上一層,當(dāng)程序調(diào)用繪圖函數(shù)時(shí),GDI將繪圖命令傳送給當(dāng)前設(shè)
3、備的驅(qū)動(dòng)程序,以調(diào)用驅(qū)動(dòng)程序供應(yīng)的接口函數(shù);驅(qū)動(dòng)程序的接口函數(shù)將 Windows 繪圖命令轉(zhuǎn)化為設(shè)備能夠執(zhí)行的輸出命令,實(shí)現(xiàn)圖形的繪制;不同設(shè)備具 有不同的驅(qū)動(dòng)程序,設(shè)備驅(qū)動(dòng)程序是設(shè)備相關(guān)的;設(shè)備無關(guān)性:是指操作系統(tǒng)屏蔽了硬件設(shè)備的差異,使用戶編程時(shí)一般無需考慮設(shè)備的類型,如不同種類的顯示器或打印機(jī);簡潔而言: GDI 繪圖語句的設(shè)備無關(guān)性;MFC 與 SDK 編程:MFC 將 GDI 函數(shù)和繪圖對(duì)象封裝在一個(gè)名為 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方法編程,在程序中通過聲明一個(gè) MFC設(shè)備環(huán)境類的對(duì)象就自動(dòng)獵取了一個(gè)DC,當(dāng)該對(duì)象被銷毀時(shí)就自動(dòng)釋放了獵取的 DC;主要有三種方式定義 DC 對(duì)象:1,CDC pdcthis; 2,CClientDC pdcthis; 3,CP
5、aintDC pdcthis CDC類既作為其它 MFC設(shè)備環(huán)境類的基類,又可以作為一個(gè)一般的設(shè)備環(huán)境類使用;利用它可以拜訪設(shè)備屬性和設(shè)置繪圖屬性;CDC類對(duì) GDI 的全部繪圖函數(shù)進(jìn)行了封裝;CPaintDC 類是 OnPaint 函數(shù)使用的設(shè)備環(huán)境類,它代表一個(gè)窗口的繪圖畫面;假如添 加 WM_PAINT消息處理函數(shù) OnPaint ,就需要使用 CPaintDC 類來定義一個(gè)設(shè)備環(huán)境對(duì)象;CClientDC 類代表了客戶區(qū)設(shè)備環(huán)境;當(dāng)在客戶區(qū)實(shí)時(shí)繪圖時(shí),需要利用 CClientDC 類 定義一個(gè)客戶區(qū)設(shè)備環(huán)境;CWindowDC類代表了整個(gè)程序窗口設(shè)備環(huán)境,可以在整個(gè)窗口區(qū)域繪圖;二,
6、GDI 坐標(biāo)系和映射模式:GDI 支持這兩種坐標(biāo)系;一般而Windows 坐標(biāo)系分為規(guī)律坐標(biāo)系和設(shè)備坐標(biāo)系兩種,言, GDI 的文本和圖形輸出函數(shù)使用規(guī)律坐標(biāo),而在客戶區(qū)移動(dòng)或按下鼠標(biāo)的鼠標(biāo) 位置是采納設(shè)備坐標(biāo);規(guī)律坐標(biāo)系是面對(duì) DC 的坐標(biāo)系,這種坐標(biāo)不考慮詳細(xì)的設(shè)備類型,在繪圖時(shí),Windows 會(huì)依據(jù)當(dāng)前設(shè)置的映射模式將規(guī)律坐標(biāo)轉(zhuǎn)換為設(shè)備坐標(biāo);設(shè)備坐標(biāo)系是面對(duì)物理設(shè)備的坐標(biāo)系,這種坐標(biāo)以像素或設(shè)備所能表示的最小長度單位為單位, X 軸方向向右, Y 軸方向向下;設(shè)備坐標(biāo)系的原點(diǎn)位置0, 0不限定在設(shè)備顯示區(qū)域的左上角; 設(shè)備坐標(biāo)系分為屏幕坐標(biāo)系、系;窗口坐標(biāo)系和客戶區(qū)坐標(biāo)系三種相互獨(dú)立的
7、坐標(biāo)屏幕坐標(biāo)系以屏幕左上角為原點(diǎn),一些與整個(gè)屏幕有關(guān)的函數(shù)均采納屏幕坐標(biāo),如GetCursorPos、SetCursorPos、 CreateWindow 、MoveWindow;彈出式菜單使用的也是屏幕坐標(biāo);窗口坐標(biāo)系以窗口左上角為坐標(biāo)原點(diǎn),它包括窗口標(biāo)題欄、菜單欄和工具欄等范疇;客戶區(qū)坐標(biāo)系以窗口客戶區(qū)左上角為原點(diǎn),主要用于客戶區(qū)的繪圖輸出和窗口消息的處理;鼠標(biāo)消息的坐標(biāo)參數(shù)使用客戶區(qū)坐標(biāo),坐標(biāo)對(duì)應(yīng)的規(guī)律坐標(biāo);坐標(biāo)之間的相互轉(zhuǎn)換:CDC類繪圖成員函數(shù)使用與客戶區(qū)MFC 供應(yīng)了兩個(gè)函數(shù) CWnd:ScreenToClient 和 CWnd:ClientToScreen 用于屏幕坐標(biāo)與客戶區(qū)坐
8、標(biāo)的相互轉(zhuǎn)換;MFC 供應(yīng)了兩個(gè)函數(shù) 間的相互轉(zhuǎn)換;CDC:DPtoLP 和 CDC: LPtoDP 用于設(shè)備坐標(biāo)與規(guī)律坐標(biāo)之映像模式(設(shè)備環(huán)境類對(duì)象調(diào)用其成員設(shè)置窗口映像模式)設(shè)置窗口映像模式:映像模式定義了將規(guī)律單位轉(zhuǎn)化為設(shè)備的度量單位以及設(shè)備的x 方向和 y 方向,程序員可在一個(gè)統(tǒng)一的規(guī)律坐標(biāo)系中操作而不必考慮輸出設(shè)備的坐標(biāo)系情形映射模式 規(guī)律單位 坐標(biāo)系設(shè)定MM_TEXT 一個(gè)像素 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è)置原點(diǎn):視口的缺省原點(diǎn)和窗口的缺省原點(diǎn)均為(0,0)通過調(diào)用函數(shù) CDC:SetWindowOrg 設(shè)置設(shè)備環(huán)境的 窗口原點(diǎn) 的坐標(biāo),調(diào)用CDC:SetViewportOrg 重新設(shè)置設(shè)備的視口原點(diǎn) 的坐標(biāo); 窗口: 對(duì)應(yīng)規(guī)律坐標(biāo)系上程序員設(shè)定的區(qū)域,視口:對(duì)
10、應(yīng)實(shí)際輸出設(shè)備上程序員設(shè)定的區(qū)域窗口原點(diǎn)是指規(guī)律窗口坐標(biāo)系的原點(diǎn)在視口(設(shè)備) 坐標(biāo)系中的位置,視口原點(diǎn)是指設(shè)備實(shí)際輸出區(qū)域的原點(diǎn);除了映射模式,窗口和視口也是打算一個(gè)點(diǎn)的規(guī)律坐標(biāo)如何轉(zhuǎn)換為設(shè)備坐標(biāo)的一個(gè)因素;一個(gè)點(diǎn)的規(guī)律坐標(biāo)依據(jù)如下式子轉(zhuǎn)換為設(shè)備坐標(biāo):設(shè)備(視口)坐標(biāo)= 規(guī)律坐標(biāo) 窗口原點(diǎn)坐標(biāo)+ 視口原點(diǎn)坐標(biāo)繪圖模式: 1,規(guī)律坐標(biāo)映射為設(shè)備坐標(biāo)(設(shè)置原點(diǎn));2,直接在設(shè)備坐標(biāo)中繪圖;坐標(biāo)映射: 設(shè)坐標(biāo)方向?yàn)橄蛴?向下,SetWindowOrg50 ,50,就:規(guī)律坐標(biāo)(50,50)映射為設(shè)備坐標(biāo)(0,0);即規(guī)律坐標(biāo)中圖形向左向上進(jìn)行了平移;故窗口原點(diǎn)的設(shè)置原就:設(shè)為與要移動(dòng)方向相反方向;
11、規(guī)律坐標(biāo) 設(shè)備坐標(biāo)A0,0 A50,50 例: 填空:將如上圖中規(guī)律坐標(biāo)中圖形移到設(shè)備坐標(biāo)中相應(yīng)位置,就:SetWindowOrg _, _ 例 分別在 OnDraw 函數(shù)中添加如下代碼,設(shè)置不同的窗口原點(diǎn)和視口原點(diǎn),結(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)境類對(duì)象的其它成員函數(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ù)存放顏色,它是一個(gè) 32 位整數(shù);任何一種顏色都是由紅、綠、藍(lán)三種基本顏色組成,COLORREF 類型數(shù)據(jù)的低位字節(jié)存放紅色強(qiáng)度值,第 2 個(gè)字節(jié)存放綠色強(qiáng)度值,第3 個(gè)字節(jié)存放藍(lán)色強(qiáng)度值,高位字節(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 對(duì)象:GDI 對(duì)象是 Windows 圖形設(shè)備接口的抽象繪圖工具;除了畫筆和畫刷,其它 GDI 對(duì)象仍包括字體、位圖和調(diào)色板;MFC 對(duì) GDI 對(duì)象進(jìn)行了很好的封裝,供應(yīng)了封裝 GDI 對(duì)象的類,如 CPen、CBrush、CFont、CBitmap 和 CPalette 等,這些類都是GDI 對(duì)象類 CGdiObject 的派生類;CDC 類供應(yīng)了成員函數(shù)
15、SelectObject挑選用戶自己創(chuàng)建的 GDI 對(duì)象;該函數(shù)有多種重載形式,可以挑選用戶已定制好的畫筆、畫刷、字體和位圖等不同類型的 GDI 對(duì)象;CPen* SelectObjectCPen* pPen; CPen *poldpen=pdc. SelectObject&pen; CBrush* SelectObjectCBrush* pBrush; virtual CFont* SelectObjectCFont* pFont; 繪圖輸出的一般過程:1, 創(chuàng)建設(shè)備環(huán)境對(duì)象, CClientDC pdcthis; 2, 創(chuàng)建 GDI 對(duì)象(繪圖工具),CPen pen; pen.Creat
16、GetStockObject(BLACK_PEN );3, 設(shè)備環(huán)境對(duì)象挑選某些 GDI 對(duì)象, pdc. SelectObject&pen;4, 設(shè)備環(huán)境對(duì)象使用 GDI 對(duì)象調(diào)用繪圖函數(shù)輸出;pdc.ellipse; 1 畫筆的創(chuàng)建第一步:使用畫筆之前必需事先定義一個(gè)畫筆對(duì)象(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 :點(diǎn)劃線PS_DASHDOTDOT : 雙點(diǎn)劃線PS_DOT:點(diǎn)線PS_INSIDEFRAME :實(shí)線PS_NULL :無PS_SOLID :實(shí)線注:不再使用當(dāng)前畫筆時(shí),需刪除
18、畫筆,以免占內(nèi)存2 font.DeleteObject API 中: DeleteObjecthP; 畫刷的創(chuàng)建第一步:使用畫刷需事先定義一個(gè)畫刷類對(duì)象;形式如下:/ 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; 注: 刪除畫刷;不使用畫刷時(shí),可用 brush. DeleteObject; 刪除畫刷,釋放內(nèi)存四、 常用繪圖函數(shù)(由設(shè)備環(huán)境類對(duì)象 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)點(diǎn)畫直線的函數(shù) LineToEx ,BOOL LineToExHDC hdc,int X,int Y /X 和 Y 為線段的終點(diǎn)坐標(biāo)3 從 當(dāng) 前 位 置 開 始 , 依 次 用 線 段 連 接 lpPoints 中 指 定 的 各 點(diǎn) . pdc. Polyline / BOOL Polyline / HDC hdc, LPPOINT lpPoint
21、s, /指向包含各點(diǎn)坐標(biāo)的 POINT 結(jié)構(gòu)數(shù)組的指針int nCount / nCount 為 POINT 數(shù)組中點(diǎn)的個(gè)數(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, /橢圓弧起始點(diǎn)坐標(biāo)int X4,int Y4 /橢圓弧終止點(diǎn)坐標(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)線的確定點(diǎn)坐標(biāo)int X4,int Y4 /橢圓弧終止經(jīng)線的確定點(diǎn)坐標(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 包含各點(diǎn)坐標(biāo)的 POINT 數(shù)組的地址多邊形點(diǎn)的個(gè)數(shù)四、 應(yīng)用實(shí)例【例】 利用繪圖函數(shù)創(chuàng)建填充區(qū);共有三個(gè)填充圖形,第一個(gè)是用深灰色畫刷填充帶圓角的矩形,其次個(gè)是采納亮灰色畫刷填充一個(gè)橢圓型圖,第三個(gè)是用虛畫刷填充餅形圖;使用虛畫刷填充時(shí),看不出填充成效 . 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; /繪制餅形 動(dòng)態(tài)圖形:用戶區(qū)窗口圖形的刷新:常用用戶區(qū)窗口刷新機(jī)制:當(dāng)用戶區(qū)的內(nèi)容需要刷新時(shí),系統(tǒng)向應(yīng)用程序消息隊(duì)列發(fā)送WM_PAINT 消息,系統(tǒng)在應(yīng)用程序的消息隊(duì)列中加入該消息,以通知窗口函數(shù)執(zhí)行刷新處理;應(yīng)用程序接收到該消息后,調(diào)用 刷新懇求的兩種方式:On_Paint 函數(shù)實(shí)現(xiàn)窗口圖形的重畫;以下大事,系統(tǒng)會(huì)自動(dòng)窗口刷新懇求:用戶區(qū)移動(dòng)或顯示,用戶窗口大小轉(zhuǎn)變,程序通過滾動(dòng)條滾動(dòng)窗口, 窗口被另一個(gè)窗口掩蓋的,復(fù)原如下拉式菜單關(guān)閉等,光標(biāo)穿過用戶區(qū),圖標(biāo)拖過用戶區(qū);用戶的刷新懇求:調(diào)用窗口類函數(shù):Invalidatetrue 或 InvalidateR
27、ect 【例】 編寫一個(gè)程序, 在屏幕上顯現(xiàn)一個(gè)圓心沿正弦曲線軌跡移動(dòng)的實(shí)心圓,而且,每隔四分之一周期, 圓的填充色和圓的周邊顏色都發(fā)生變化,由正弦曲線幅值的 0.2 倍至 0.6 倍線性增長;同時(shí), 圓的半徑在四分之一周期之內(nèi)1 正弦曲線的表示:窗口初始化時(shí),生成正弦曲線各點(diǎn)的坐標(biāo);把正弦曲線一個(gè)周期的橫坐標(biāo)分成 100 個(gè)等分點(diǎn),儲(chǔ)備在數(shù)組lpSin100 中, 100 個(gè)點(diǎn)的坐標(biāo)運(yùn)算如下:forint j=0;j100;j+ /生成正弦曲線的點(diǎn)坐標(biāo) /POINT psSin100 lpSinj.x=longj*2*Pi/100*60;/ 正弦曲線寬放大 60 倍 lpSinj.y=lon
28、gdfRange*sinj*2*Pi/100; 高放大 dfRange=100 倍2 動(dòng)態(tài)顯示圓在正弦曲線上移動(dòng) 數(shù)組 lpSin100 的長度為 100,設(shè)定圓在正弦曲線移動(dòng)時(shí)共有 100 個(gè)位置 數(shù)組中每一個(gè)值是圓移動(dòng)時(shí)圓心的坐標(biāo),每四分之一周期有 25 個(gè)位置i=25 處于第 1 個(gè) 1/4 周期,創(chuàng)建紅色畫筆和畫刷;25i50 處于第 2 個(gè) 1/4 周期,創(chuàng)建綠色畫筆和畫刷;50i75 處于第 3 個(gè) 1/4 周期,創(chuàng)建藍(lán)色畫筆和畫刷;75i100 處于第 4 個(gè) 1/4 周期,創(chuàng)建黃色畫筆和畫刷;CPen pen;Cbrush brush; ifi=25 /第一個(gè) 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;/ 運(yùn)算半徑 在消息 WM_PAINT處理程序中, 由此經(jīng)過線性差分運(yùn)算圓半徑的大小lRadious ,第 1 個(gè) 1/4周期的程序代碼如下:創(chuàng)建的畫筆和畫刷選入設(shè)備環(huán)境后
30、,調(diào)用函數(shù) Ellipse 繪制圓形3動(dòng)態(tài)顯示的關(guān)鍵:Sleep100; /停 0.1 秒; 調(diào)用 Sleep100函數(shù)使程序暫停0.1 秒;所含參數(shù)100代表暫停的時(shí)間,使用毫秒作單位;ifi100 InvalidateRecthWnd,NULL,1; /刷新用戶區(qū);i100 時(shí)調(diào)用函數(shù)刷新用戶區(qū) 發(fā)送 WM_PAINT 消息,刷新整個(gè)用戶區(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; /定義正弦曲線的點(diǎn)坐標(biāo) . ,做為該類的成員;位置:在對(duì)話框類對(duì)象定義中(即頭文件中)或在 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+ /生成正弦曲線的點(diǎn)坐標(biāo) lpSinj.x=longj*2*Pi/100*dfTheta; lpSinj.y=longdfRange*sinj*2*Pi/100; 位置:在對(duì)話框類對(duì)象的構(gòu)造函數(shù)或初始化函數(shù)中:三,繪圖:CText1Dlg:OnInitDialog 位置:在對(duì)話框類對(duì)象的繪圖函數(shù)中:void CText1Dlg:OnPaint CClientDC pdcthis; CPen pen,*mypen, pen1; CBrush brush,*mybrush; pdc.SetWindowOrg-50,-150; /pdc.SetWindowExt-200,-200;/ 設(shè)置原點(diǎn)坐標(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車抵押貸款居間擔(dān)保合同
- 網(wǎng)絡(luò)電商平臺(tái)加盟合同范本
- 機(jī)械部件外協(xié)加工協(xié)議
- 房產(chǎn)質(zhì)押貸款協(xié)議
- 2024年電子商務(wù)安全性論文
- 代理補(bǔ)充協(xié)議書格式
- 房屋裝潢施工協(xié)議案例
- 勞動(dòng)合同終止后的社保轉(zhuǎn)移
- 標(biāo)準(zhǔn)建設(shè)工程借款合同范本
- 私人物品交易合同模板
- 急診科進(jìn)修三個(gè)月總結(jié)
- 老人去世生平簡歷范文(十八篇)
- DLT 5630-2021 輸變電工程防災(zāi)減災(zāi)設(shè)計(jì)規(guī)程-PDF解密
- 2023全國高考四套文言文真題挖空訓(xùn)練(答案)
- MOOC 弟子規(guī)與服務(wù)外包職業(yè)素養(yǎng)-蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學(xué)院 中國大學(xué)慕課答案
- 企業(yè)環(huán)境管理知識(shí)培訓(xùn)
- 2024年北京京能清潔能源電力股份有限公司招聘筆試參考題庫含答案解析
- 浙南名校聯(lián)盟2023-2024學(xué)年高一年級(jí)上冊12月聯(lián)考物理試題含答案
- 帕金森病機(jī)制
- 2024航空工業(yè)集團(tuán)校園招聘筆試參考題庫附帶答案詳解
- 如何進(jìn)行有效的課堂筆記
評(píng)論
0/150
提交評(píng)論