計(jì)算機(jī)軟件工程基礎(chǔ)課件,高等教育出版社,第.ppt_第1頁(yè)
計(jì)算機(jī)軟件工程基礎(chǔ)課件,高等教育出版社,第.ppt_第2頁(yè)
計(jì)算機(jī)軟件工程基礎(chǔ)課件,高等教育出版社,第.ppt_第3頁(yè)
計(jì)算機(jī)軟件工程基礎(chǔ)課件,高等教育出版社,第.ppt_第4頁(yè)
計(jì)算機(jī)軟件工程基礎(chǔ)課件,高等教育出版社,第.ppt_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章 圖形設(shè)備接口,第8章 圖形設(shè)備接口,8.1 圖形設(shè)備接口介紹 8.2文本和字體 8.3 簡(jiǎn)單圖形繪制 8.4 基礎(chǔ)實(shí)例字體應(yīng)用程序 8.5 提高實(shí)例繪圖應(yīng)用程序 8.6 本章小結(jié) 8.7 思考練習(xí)題,8.1 圖形設(shè)備接口介紹,圖形設(shè)備接口(graphics device interface,GDI)是Windows提供的一個(gè)支持圖形編程處理的抽象接口。GDI作為Windows的一個(gè)組成部分,提供了各種各樣的繪圖工具。應(yīng)用程序通過(guò)GDI與設(shè)備打交道,GDI通過(guò)不同設(shè)備提供的驅(qū)動(dòng)程序?qū)⒗L圖語(yǔ)句轉(zhuǎn)換為對(duì)應(yīng)的繪圖指令,避免了用戶直接對(duì)硬件進(jìn)行操作,從而實(shí)現(xiàn)設(shè)備無(wú)關(guān)性。所謂設(shè)備無(wú)關(guān)性,是指操作系統(tǒng)屏蔽了硬件設(shè)備的差異,使用戶編程時(shí)不用過(guò)多考慮設(shè)備的類(lèi)型,如不同種類(lèi)的顯示器或打印機(jī)等。,8.1.1設(shè)備環(huán)境類(lèi),Windows設(shè)備環(huán)境是GDI的關(guān)鍵元素,GDI作為一個(gè)編程接口,提供了大量的與設(shè)備無(wú)關(guān)的圖形處理函數(shù),這些函數(shù)定義在Windows的三個(gè)核心動(dòng)態(tài)鏈接庫(kù)之一的Gdi32.dll中,編程時(shí)可以通過(guò)調(diào)用GDI函數(shù)繪制不同形狀、顏色和類(lèi)型的圖形。MFC對(duì)GDI函數(shù)和繪圖對(duì)象進(jìn)行了封裝,因此可以更方便地利用MFC中有關(guān)圖形處理的類(lèi)進(jìn)行圖形繪制。,8.1.1設(shè)備環(huán)境類(lèi),圖8-1說(shuō)明了Windows應(yīng)用程序繪圖的過(guò)程。,8.1.1設(shè)備環(huán)境類(lèi),MFC提供的DC類(lèi)包括CDC類(lèi)、CPaintDC類(lèi)、CClientDC類(lèi)、CWindowDC類(lèi)和CMetaFileDC類(lèi)等,其中CDC類(lèi)是MFC設(shè)備環(huán)境類(lèi)的基類(lèi),其他的MFC設(shè)備環(huán)境類(lèi)都是CDC類(lèi)的派生類(lèi)。下面對(duì)這幾個(gè)類(lèi)進(jìn)行簡(jiǎn)要介紹。 1)CDC類(lèi) CDC類(lèi)既可作為其他MFC設(shè)備環(huán)境類(lèi)的基類(lèi),又可作為一般的設(shè)備環(huán)境類(lèi)使用,8.1.1設(shè)備環(huán)境類(lèi),為創(chuàng)建新的CDC設(shè)備描述表對(duì)象必須調(diào)用構(gòu)造函數(shù)CDC:CDC(),接著是初始化。 初始化有如下三種方法: CreateDC()為指定設(shè)備,創(chuàng)建設(shè)備描述表。如果DC已經(jīng)創(chuàng)建,則CreateDC()方法返回True值,否則返回False。 CreateIC()為指定設(shè)備創(chuàng)建信息描述表以獲取使用設(shè)備信息,而無(wú)需創(chuàng)建設(shè)備描述表。 CreateCompatibleDC()創(chuàng)建新存儲(chǔ)設(shè)備描述表,它與現(xiàn)有 設(shè)備描述表兼容。,8.1.1設(shè)備環(huán)境類(lèi),2)CPaintDC類(lèi) CPaintDC類(lèi)是OnPaint函數(shù)使用的設(shè)備環(huán)境類(lèi),它代表一個(gè)窗口的繪圖畫(huà)面,只在相應(yīng)WM_PAINT消息的函數(shù)中使用,大多數(shù)情況是在OnPaint()函數(shù)中使用。當(dāng)應(yīng)用程序窗口出于某種原因需要更新時(shí),系統(tǒng)會(huì)想應(yīng)用程序發(fā)送WM_PAINT消息,從而調(diào)用OnPaint()函數(shù)。在CView類(lèi)的成員函數(shù)OnPaint中就這樣定義了一個(gè)設(shè)備環(huán)境。,8.1.1設(shè)備環(huán)境類(lèi),void CView:OnPaint() /定義一個(gè)設(shè)備環(huán)境 CPaintDC dc(this); OnPrepareDC( 由于基類(lèi)CView的OnPaint函數(shù)調(diào)用了OnDraw函數(shù),因此編程時(shí)經(jīng)常在OnDraw函數(shù)中輸出圖形。,8.1.1設(shè)備環(huán)境類(lèi),3)CClientDC類(lèi) CClientDC類(lèi)可能是使用最多的CDC的派生類(lèi),它代表了客戶區(qū)設(shè)備環(huán)境,因此所有使用CClientDC類(lèi)對(duì)象完成的繪圖操作都位于窗口的客戶區(qū)內(nèi)??蛻魠^(qū)是指程序窗口中不包括邊框、標(biāo)題欄、菜單欄、工具欄和狀態(tài)欄等界面元素的內(nèi)部繪圖區(qū)。當(dāng)在客戶區(qū)繪圖時(shí),需要利用CClientDC類(lèi)定義一個(gè)客戶區(qū)設(shè)備環(huán)境。,8.1.1設(shè)備環(huán)境類(lèi),4)CWindowDC類(lèi) CWindowDC類(lèi)代表了整個(gè)程序窗口設(shè)備環(huán)境,包括窗口邊框、標(biāo)題欄和菜單欄等非客戶區(qū)和客戶區(qū),因此使用窗口設(shè)備環(huán)境可以在整個(gè)程序窗口內(nèi)繪圖。 5)CMetaFileDC類(lèi) CMetaFileDC類(lèi)是用于創(chuàng)建一個(gè)Windows圖元文件的設(shè)備環(huán)境。Windows圖元文件包含了一系列GDI繪圖命令,使用這些信息可以重復(fù)創(chuàng)建所需的圖形或文本。,8.1.2 GDI對(duì)象,Windows GDI提供了一些繪圖對(duì)象,這些GDI對(duì)象是Windows圖形設(shè)備接口的抽象繪圖工具,程序通過(guò)GDI對(duì)象來(lái)設(shè)置繪圖的工具和風(fēng)格。GDI對(duì)象包含畫(huà)筆、畫(huà)刷、字體、位圖和調(diào)色板。,8.1.2 GDI對(duì)象,GDI類(lèi)在MFC中的層次結(jié)構(gòu)如圖8-2所示。,8.1.2 GDI對(duì)象,MFC的CDC類(lèi)提供了成員函數(shù)SelectObject,用于選擇用戶自己創(chuàng)建的GDI對(duì)象,該函數(shù)有多種重載形式,可以選擇用戶已定制好的畫(huà)筆、畫(huà)刷、字體和位圖等不同類(lèi)型的GDI對(duì)象。 訪函數(shù)常用的重載形式如下所示: CPen* SelectObject(CPen* pPen); CBrush* SelectObjec(CBrush* pBrush); Virtual CFont* SelectObject(CFont* pFont); CBitmap* SelectObject(CBitmap* pBitmap);,8.1.2 GDI對(duì)象,上述函數(shù)的參數(shù)是一個(gè)指向用戶已定制好的GDI對(duì)象的指針,選擇操作成功時(shí)函數(shù)將返回以前GDI對(duì)象的指針,否則返回NULL。 MFC的CDC類(lèi)還提供了成員函數(shù)DeleteObject,用于釋放創(chuàng)建的GDI對(duì)象。使用方式如下: GdiObjectName.DeleteObject(); 其中GdiObjectName是用戶將要釋放的GDI對(duì)象的名稱。,8.1.2 GDI對(duì)象,Windows GDI提供了一些繪圖對(duì)象,這些GDI對(duì)象是Windows圖形設(shè)備接口的抽象繪圖工具,程序通過(guò)GDI對(duì)象來(lái)設(shè)置繪圖的工具和風(fēng)格。GDI對(duì)象包含畫(huà)筆、畫(huà)刷、字體、位圖和調(diào)色板等。GDI對(duì)象類(lèi)在MFC中的層次結(jié)構(gòu)如圖8-2所示。,MFC的CDC類(lèi)提供了成員函數(shù)SelectObject,用于選擇用戶自己創(chuàng)建的GDI對(duì)象,該函數(shù)有多種重載形式,可以選擇用戶已定制好的畫(huà)筆、畫(huà)刷、字體和位圖等不同類(lèi)型的GDI對(duì)象。該函數(shù)常用的重載形式如下所示: CPen*SelectObject(CPen*pPen); CBrush*SelectObject(CBrush*pBrush); Virtual CFont*SelectObject(CFont*pFont); CBitmap*SelectObject(CBitmap*pBitmap);,1.使用GDI對(duì)象繪圖 繪圖工具的使用包括創(chuàng)建GDI對(duì)象、選擇GDI對(duì)象、使用GDI對(duì)象繪圖和使用后釋放GDI對(duì)象等步驟。 (1)定義一個(gè)GDI對(duì)象(如CPen對(duì)象、CBrush對(duì)象),然后用相應(yīng)的函數(shù)(如CreatePen()、CreateSolidBrush())創(chuàng)建此GDI對(duì)象。但要注意,有些GDI派生類(lèi)的構(gòu)造函數(shù)允許用戶提供足夠的信息,從而一步即可完成對(duì)象的創(chuàng)建任務(wù),如CPen類(lèi)、CBrush類(lèi)。 (2)將構(gòu)造的GDI對(duì)象選入當(dāng)前設(shè)備環(huán)境中,并將原來(lái)的GDI對(duì)象保存起來(lái)。 (3)繪圖結(jié)束后,恢復(fù)當(dāng)前設(shè)備環(huán)境中原來(lái)的GDI對(duì)象。,注意:對(duì)于顯示設(shè)備環(huán)境來(lái)說(shuō),在每個(gè)消息控制函數(shù)的入口處,設(shè)備環(huán)境都是未被初始化的,當(dāng)函數(shù)退出之后,在該函數(shù)內(nèi)部所進(jìn)行的任何GDI選擇都不再有效,因此,每次都必須從頭開(kāi)始設(shè)置設(shè)備環(huán)境。,2.庫(kù)存的GDI對(duì)象 除了自定義的GDI對(duì)象外,Windows還包含了一些預(yù)定義的庫(kù)存GDI對(duì)象。由于它們是Windows系統(tǒng)的一部分,因此用戶不用刪除它們。CDC的成員函數(shù)SelectStockObject可以把一個(gè)庫(kù)存對(duì)象選入當(dāng)前設(shè)備環(huán)境中,并返回原先被選中的對(duì)象指針,同時(shí)使原先被選中的對(duì)象從設(shè)備環(huán)境中分離出來(lái)。,函數(shù)SelectStockObject可選用的庫(kù)存GDI對(duì)象類(lèi)型可以是下列值之一: BLACK_BRUSH:黑色畫(huà)刷。 DKGRAY_BRUSH:深灰色畫(huà)刷。 GRAY_BRUSH:灰色畫(huà)刷。 HOLLOW_BRUSH:中空畫(huà)刷。 LTGRAY_BRUSH:淺灰色畫(huà)刷。 NULL_BRUSH:空畫(huà)刷。 WHITE_BRUSH:白色畫(huà)刷。 BLACK_PEN:黑色畫(huà)筆。 NULL_PEN:空畫(huà)筆。 WHITE_PEN:白色畫(huà)筆。 DEVICE_DEFAULT_FONT:設(shè)備的默認(rèn)字體。 SYSTEM_FONT:系統(tǒng)字體。,畫(huà)筆和畫(huà)刷是GDI對(duì)象中最常用的兩個(gè)繪圖對(duì)象,它們?cè)诶L圖時(shí)可以同時(shí)使用。其中,畫(huà)筆用于設(shè)置畫(huà)線的方式,包括點(diǎn)、直線和曲線以及封閉幾何圖形周?chē)倪吘€(如矩形和橢圓等),而畫(huà)刷用于設(shè)置封閉圖形內(nèi)部區(qū)域的繪制方式。 當(dāng)然,繪圖的最終效果不完全取決于畫(huà)筆和畫(huà)刷的設(shè)置,還可以通過(guò)設(shè)置繪圖模式進(jìn)行修正。CDC類(lèi)的成員函數(shù)SetROP2()用于設(shè)置繪圖模式,該函數(shù)聲明如下: int SetRop2(int nDrawMode);,8.1.3 映射模式,映射模式確定了在繪制圖形時(shí)所依據(jù)的坐標(biāo)系,它定義了邏輯單位的實(shí)際大小、坐標(biāo)增長(zhǎng)方向。所有映射模式的坐標(biāo)原點(diǎn)均在設(shè)備輸出區(qū)域(如客戶區(qū)或打印區(qū))的左上角。此外,對(duì)于某些映射模式,用戶還可以自定義窗口的長(zhǎng)度和寬度,設(shè)置視圖區(qū)的物理范圍。,8.1.3 映射模式,可以使用CDC:SetMapMode函數(shù)更改映射模式,并使用CDC:SetViewportOrg和CDC:SetWindowOrg函數(shù)移動(dòng)邏輯坐標(biāo)系的原點(diǎn)。Windows支持8種映射模式.,表8-2 映射模式,8.1.3 映射模式,如果希望坐標(biāo)系的原點(diǎn)在顯示區(qū)域中央而不是左上角,可以使用CDCLSetWindowOrg或CDC:SetViewportOrg初始化一個(gè)名為Rect的CRect對(duì)象以及窗口工作區(qū)的設(shè)備坐標(biāo),并且DC表示工作區(qū)設(shè)備上下文,則下例將坐標(biāo)的原點(diǎn)移動(dòng)到工作區(qū):,CRect rect; GetClientRect(rect); pDC-SetViewportOrg(rect.Width()/2,rect.Height()/2);,8.1.4 自定坐標(biāo)系統(tǒng),Windows為應(yīng)用程序提供了兩類(lèi)坐標(biāo):設(shè)備坐標(biāo)和邏輯坐標(biāo)。 Win32 API和MFC都提供了屏幕坐標(biāo)向窗口坐標(biāo)和客戶區(qū)坐標(biāo)、窗口坐標(biāo)和客戶區(qū)坐標(biāo)向屏幕坐標(biāo)的坐標(biāo)轉(zhuǎn)換函數(shù),它們的原型如下:,8.1.4 自定坐標(biāo)系統(tǒng),BOOL ClientToScreen(HWND hWnd,LPPOINT lpPoint); BOOL ScreenToClient(HWND hWnd,LPPOINT lpPoint); BOOL CWindow:ClientToScreen(LPPOINT lpPoint); BOOL CWindow:ClientToScreen(LPRECT lpRect); BOOL CWindow:ScreenToClient(LPPOINT lpPoint); BOOL CWindow:ScreenToClient(LPRECT lpRect); BOOL CWnd:ClientToScreen(LPPOINT lpPoint); BOOL CWnd:ClientToScreent(LPRECT lpRect); BOOL CWnd:ScreenToClient(LPPOINT lpPoint); BOOL CWnd:ScreenToClient(LPRECT lpRect);,8.1.4 自定坐標(biāo)系統(tǒng),Win32 API 和MFC都提供了邏輯坐標(biāo)和設(shè)備坐標(biāo)相互轉(zhuǎn)換的函數(shù),它們的原型如下: BOOL DPtoLP(HDC hdc,LPPOINT lpPoints,int nCount); BOOL LPtoDP(HDC hdc,LPPOINT lpPoints,int nCount); void CDC:DPtoLP(LPPOINT lpPoints,int nCount=1); void CDC:DPtoLP(LPRECT lpRect); void CDC:DPtoLP(LPSIZE lpSize); void CDC:LPtoDP(LPPOINT lpPoints,int nCount=1); void CDC:LPtoDP(LPRECT lpRect); void CDC:LPtoDP(LPSIZE lpSize);,8.2文本和字體,很多Windows應(yīng)用程序都需要顯示文本,并且文本還是一些應(yīng)用程序的主要處理對(duì)象,如微軟的字體處理軟件Word。文本與字體密切相關(guān),字體決定了輸出文本的外觀特性,合適的字體可以增強(qiáng)文本的表現(xiàn)力。Windows為文本的顯示提供了多種字體支持,而在程序中用戶可以創(chuàng)建不同風(fēng)格的邏輯字體來(lái)輸出文本。,8.2.1 將對(duì)象選入設(shè)備(DC),無(wú)論何時(shí)將一個(gè)非常備對(duì)象選入DC,都最好記入前一個(gè)被選入DC的對(duì)象。當(dāng)使用SelectObject函數(shù)時(shí),會(huì)得到一個(gè)指向?qū)ο蟮闹羔?。例如,如果使用SelectObject函數(shù)把最新創(chuàng)建的字體選入DC,則返回指向CFont對(duì)象的指針。在選擇非常備字體之前,可以記錄被選入DC的字體,如下所示: CFont *pOldFont; pOldFont=pDC-SelectObject(,8.2.1 將對(duì)象選入設(shè)備(DC),當(dāng)使用完非常備字體(或其他GDI對(duì)象)之后,必須將舊字體選回到DC中。如果說(shuō)新創(chuàng)建的GDI對(duì)象在開(kāi)發(fā)人員試圖刪除它(或?qū)ο蟮奈鰳?gòu)函數(shù)試圖刪除它)的時(shí)候,仍然在DC中,則刪除失?。辉揋DI對(duì)象占用的內(nèi)存被鎖定,直至應(yīng)用程序退出。以下是當(dāng)使用完非常備GDI對(duì)象后,應(yīng)該添加的最后一行代碼: pDC-SelectObject(pOldFont);,8.2.1 將對(duì)象選入設(shè)備(DC),以下例子顯示了如何獲得一個(gè)常備字體: CFont fontStock; fontStock.CreateStockObject(ANSI_FIXED_FONT); 與其繪圖屬性一樣,在字體影響輸出外觀之前, 必須被連接到DC上。為了將字體連接到DC上,應(yīng)調(diào)用CDC:SelectObject函數(shù)。例如,以下代碼將剛創(chuàng)建的字體連接到DC上: pDC-SelectObject(,8.2.1 將對(duì)象選入設(shè)備(DC),另外,還可以選擇非常備字體,但為了選擇一種常備字體以外的字體,必須向GDI提交字體請(qǐng)求。表示字體請(qǐng)求的一種方式是使用LOGFONT(邏輯字體)數(shù)據(jù)結(jié)構(gòu)。為了將字體請(qǐng)求提交給GDI,開(kāi)發(fā)人員要填寫(xiě)此數(shù)據(jù)結(jié)構(gòu),并將它傳遞到CFont的初始化函數(shù)CFont:CreateFontIndirect中。此函數(shù)名稱中的“Indirect”指明函數(shù)帶有一個(gè)指針參數(shù)。另一個(gè)初始化函數(shù)CFont:CreateFont帶有一系列參數(shù),這些參數(shù)合在一起,與LOGFONT匹配。,8.2.2 字體的屬性和創(chuàng)建,字體的屬性有很多,但主要有字樣、風(fēng)格和尺寸 3個(gè)。 字樣是字符書(shū)寫(xiě)和顯示時(shí)表現(xiàn)出的特定模式,例如,對(duì)于漢字,通常有宋體、楷體、仿宋、黑體、隸 書(shū)以及幼圓等多種字樣。 字體風(fēng)格主要表現(xiàn)為字體的粗細(xì)和是否傾斜等特點(diǎn)。GDI+為用戶提供了一些預(yù)定義的字體風(fēng)格: FontStyleBold(加粗) FontStyleRegular(正常) FontStyleItalic(斜體) FontStyleBoldItalic (粗斜體) FontStyleUnderline(下劃線) FontStyleStrikeout(刪除線)。,8.2.2 字體的屬性和創(chuàng)建,下面代碼說(shuō)明了如何利用CreatePointFont函數(shù)創(chuàng)建自己的字體。 CClientDC dc(this); /獲取設(shè)備環(huán)境 CFont fntNew,*pfntOld; fntNew.CreatePointFont(200,”Arial”, /刪除自定義字體,8.2.2 字體的屬性和創(chuàng)建,使用CreateFontIndirect()函數(shù)和LOGFONT結(jié)構(gòu)創(chuàng)建字體的代碼如下所示。 CFont font; LOGFONT LogFnt; memset(,8.2.4 輸出文本,文本的最終輸出不僅依賴于文本的字體,而且還和文本的顏色、對(duì)齊方式等有很大關(guān)系。CDC類(lèi)提供了4個(gè)輸出文本的成員函數(shù): 1. TextOut( ) 2. DrawText( ) 3. ExtTextOut( ) 4. TabbedTextOut( ),8.2.4 輸出文本,輸出文本的具體實(shí)現(xiàn)方法是首先。建立一個(gè)SDI應(yīng)用程序,然后在OnDraw()函數(shù)中添加如下代碼: void COutfontView:OnDraw(CDC* pDC) COutfontDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here CRect rc(10,10,200,140); pDC-Rectangle(rc); pDC-DrawText(“單行文本居中“,rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE); /將矩形向右偏移200 rc.OffsetRect(200,0); pDC-Rectangle(rc); /將一個(gè)Tab位的值指定為40個(gè)邏輯單位,8.2.4 輸出文本,int nTab=40; /使用自定義的停止位(Tab) pDC-TabbedTextOut(rc.left,rc.top,“繪制tTabt文本t示例“,1, ,8.2.4 輸出文本,上述代碼的運(yùn)行結(jié)果如圖8-3所示。,8.3 簡(jiǎn)單圖形繪制,進(jìn)行繪圖除了需要作為畫(huà)布用的設(shè)備環(huán)境,還需要使用一些繪圖工具,這些繪圖工具又統(tǒng)稱為GDI對(duì)象。畫(huà)筆(pen)和畫(huà)刷(brush)是GDI中兩種最重要的繪圖工具,畫(huà)筆用于繪制各種直線和曲線(包括幾何圖形的邊線),畫(huà)刷用于填充封閉幾何圖形的內(nèi)部區(qū)域。在默認(rèn)狀態(tài)下,當(dāng)用戶獲取一個(gè)設(shè)備環(huán)境并在其中繪圖時(shí),系統(tǒng)使用設(shè)備環(huán)境默認(rèn)的繪圖工具及其屬性。如果要使用不同風(fēng)格和顏色的繪圖工具進(jìn)行繪圖,必須重新為設(shè)備環(huán)境設(shè)置自定義的畫(huà)筆、畫(huà)刷等繪圖工具。,8.3.1 創(chuàng)建畫(huà)筆,畫(huà)筆是一個(gè)GDI對(duì)象,一般用于繪制直線和曲線以及描畫(huà)圖形輪廓。定義畫(huà)筆涉及3個(gè)關(guān)鍵特性:風(fēng)格、寬度和顏色。 創(chuàng)建GDI畫(huà)筆的最簡(jiǎn)單方式是構(gòu)造一個(gè)CPen對(duì)象,并給它傳遞定義畫(huà)筆的參數(shù)。 創(chuàng)建GDI畫(huà)筆的第2種方式是使用無(wú)參數(shù)的構(gòu)造函數(shù),然后調(diào)用CPen:CreatePen,CPen:CreatePenIndirect或者CPen:CreateStockObject函數(shù)來(lái)定義畫(huà)筆的風(fēng)格、寬度和顏色屬性。,8.3.1 創(chuàng)建畫(huà)筆,為了使基本畫(huà)筆風(fēng)格中至少有一種符合要求,CPen類(lèi)還提供了一個(gè)單獨(dú)的構(gòu)造函數(shù),用于支持各種不同風(fēng)格選項(xiàng)的修飾和幾何畫(huà)筆。 LOGBRUSH LogBrush; LogBrush.lbStyle=BS_SOLID; LogBrush.lbColor=RGB(0,255,0); CPen Pen(PS_GEOMETRIC|PS_SOLID |PS_ENDCAP_FLAT|PS_JOIN_ROUND,16, ,8.3.1 創(chuàng)建畫(huà)筆,通過(guò)將繪圖命令放置到CDC:BeginPath函數(shù)和CDC:EndPath函數(shù)調(diào)用之間,即可定義一個(gè)路徑. pDC-BeginPath(); pDC-MoveTo(0,0); pDC-LineTo(200,0); pDC-LineTo(200,200); pDC-LineTo(0,200); pDC-CloseFigure(); pDC-EndPath(); pDC-StrokePath();,8.3.2 創(chuàng)建畫(huà)刷,畫(huà)刷是用于創(chuàng)建實(shí)心圖形和渲染文本的GDI對(duì)象,并由CBrush類(lèi)進(jìn)行了封裝。畫(huà)刷有3種基本變形:原色畫(huà)刷、陰影畫(huà)刷以及圖案畫(huà)刷。CBrush類(lèi)為各種畫(huà)刷風(fēng)格提供了構(gòu)造函數(shù)。通過(guò)將COLORREF值傳遞到CBrush構(gòu)造函數(shù)中,可以進(jìn)一步生成原色畫(huà)刷,如下所示: CBrush Brush(RGB(255,0,0);,8.3.2 創(chuàng)建畫(huà)刷,通過(guò)創(chuàng)建一個(gè)未初始化的CBrush對(duì)象并調(diào)用CBrush:CreateSolidBrush函數(shù)能夠生成原色畫(huà)刷, 通過(guò)將陰影索引以及COLORREF值傳遞給CBrush的構(gòu)造函數(shù),或者通過(guò)調(diào)用CBrush:CreateHatchBrushIndirect,可以創(chuàng)建陰影畫(huà)刷。,8.3.2 創(chuàng)建畫(huà)刷,Windows可以使用以下7種常備畫(huà)刷: BLACK_BRUSH DKGRAY_BRUSH GRAY_BRUSH LTGRAY_BRUSH HOLLOW_BRUSH NULL_BRUSH WHITE_BRUSH,8.3.3 簡(jiǎn)單圖形繪制,圖形的繪制通常需要先創(chuàng)建畫(huà)筆和畫(huà)刷,然后調(diào)用CDC類(lèi)的繪圖函數(shù)。MFC為用戶提供了許多函數(shù),其中包括畫(huà)點(diǎn)、線、矩形、多邊形、圓弧、橢圓、扇形等。,8.3.3 簡(jiǎn)單圖形繪制,1畫(huà)點(diǎn) 畫(huà)點(diǎn)是最基本的繪圖操作之一,可以通過(guò)SetPixel或SetPixelV函數(shù)來(lái)實(shí)現(xiàn)。這兩個(gè)函數(shù)都是用于在指定的坐標(biāo)上設(shè)置指定的顏色,只不過(guò)SetPixelV函數(shù)不需要返回實(shí)際像素點(diǎn)的RGB值。 COLORREF SetPixel(int x,int y,COLORREF crColor); COLORREF SetPixel(POINT point,COLORREF crColor); BOOL SetPixelV(int x,int y,COLORREF crColor); BOOL SetPixelV(POINT point,COLORREF crColor);,8.3.3 簡(jiǎn)單圖形繪制,2畫(huà)線 LineTo函數(shù)正是經(jīng)當(dāng)前位置所在點(diǎn)為直線起始點(diǎn),另指定直線終點(diǎn)畫(huà)出一段直線的。其原型如下: BOOL LineTo(int x,int y); BOOL LineTo(POINT point); 如果當(dāng)前要畫(huà)的直線并不與上一條直線的終點(diǎn)相接,那么應(yīng)該調(diào)用MoveTo函數(shù)來(lái)調(diào)整當(dāng)前位置。此函數(shù)不但可以用于更新當(dāng)前位置,而且還可以用于返回更新前的當(dāng)前位置。其函數(shù)原形如下: CPoint MoveTo(int x,int y); CPoint MoveTo(POINT point);,8.3.3 簡(jiǎn)單圖形繪制,3折線 主要有Polyline、PolyPolyline和PolylineTo 3個(gè)函數(shù) BOOL Polyline(LPPOINT lpPoints,int nCount); BOOL PolylineTo(const POINT*lpPoints,int nCount); 這兩個(gè)函數(shù)用于畫(huà)一系列連續(xù)的折線。 BOOL PolyPolyline(const POINT * lpPoint,const DWORD * lpPolyPoints,int nCount); 此函數(shù)可用于繪制多條折線。其中l(wèi)pPoints同前定義,lpPolyPoints表示各條折線所需的頂點(diǎn)數(shù),nCount表示折線的數(shù)目。,8.3.3 簡(jiǎn)單圖形繪制,4矩形和圓角矩形 Rectangle和RoundRect函數(shù)分別用于矩形和圓角矩形的繪制,它們的原型如下: BOOL Rectangle(int x1,int y

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論