2022年VC教案81繪圖輸出_第1頁
2022年VC教案81繪圖輸出_第2頁
2022年VC教案81繪圖輸出_第3頁
2022年VC教案81繪圖輸出_第4頁
2022年VC教案81繪圖輸出_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論