![VC++編程基礎(chǔ)知識.ppt_第1頁](http://file1.renrendoc.com/fileroot2/2020-2/16/3e97535b-0534-4e90-aa6f-419e765e5dd8/3e97535b-0534-4e90-aa6f-419e765e5dd81.gif)
![VC++編程基礎(chǔ)知識.ppt_第2頁](http://file1.renrendoc.com/fileroot2/2020-2/16/3e97535b-0534-4e90-aa6f-419e765e5dd8/3e97535b-0534-4e90-aa6f-419e765e5dd82.gif)
![VC++編程基礎(chǔ)知識.ppt_第3頁](http://file1.renrendoc.com/fileroot2/2020-2/16/3e97535b-0534-4e90-aa6f-419e765e5dd8/3e97535b-0534-4e90-aa6f-419e765e5dd83.gif)
![VC++編程基礎(chǔ)知識.ppt_第4頁](http://file1.renrendoc.com/fileroot2/2020-2/16/3e97535b-0534-4e90-aa6f-419e765e5dd8/3e97535b-0534-4e90-aa6f-419e765e5dd84.gif)
![VC++編程基礎(chǔ)知識.ppt_第5頁](http://file1.renrendoc.com/fileroot2/2020-2/16/3e97535b-0534-4e90-aa6f-419e765e5dd8/3e97535b-0534-4e90-aa6f-419e765e5dd85.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、VC+編程基礎(chǔ)(補充),一、Windows應用程序 二、VC+編程環(huán)境介紹 三、VC+交互編程基礎(chǔ) 四、Windows圖形編程,Windows應用程序的相關(guān)概念,Windows應用程序設(shè)計方法 (1)使用Windows提供的Windows API函數(shù) Windows API是Windows系統(tǒng)和Windows應用程序間的標準程序接口,應用程序可以通過此接口訪問系統(tǒng) (2)使用Microsoft提供的MFC類庫 MFC類庫集成了大量已經(jīng)預先定義好的類,用戶可以根據(jù)編程的需要調(diào)用相應的類,或根據(jù)需要自定義有關(guān)的類。,Windows應用程序的相關(guān)概念,Windows應用程序開發(fā)模式值得注意的幾個方面
2、:,Message Processing The Windows Graphics Device Interface Resource-Based Programming Memory Management Dynamic Link Libraries The Win32 Application Programming Interface,Windows應用程序的相關(guān)概念,Windows應用程序基本結(jié)構(gòu):,Windows應用程序的相關(guān)概念,Windows應用程序以消息為基礎(chǔ),以事件驅(qū)動之。,事件驅(qū)動程序設(shè)計是圍繞著消息的產(chǎn)生與處理而展開的。一條消息是關(guān)于發(fā)生的事件的信息。作為一個Windows
3、程序員,其工作就是對正開發(fā)的應用程序所要發(fā)出或要接收的消息進行排序和管理。,Windows應用程序的相關(guān)概念,Windows消息的結(jié)構(gòu)MSG:,typedef struct tagMSG HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG, *PMSG;,Windows應用程序的相關(guān)概念,Windows消息的處理:,MSG msg /定義一個MSG類型的變量 while (GetMessage ( /將消息傳遞給窗口函數(shù),以便處理相應的消息 ,Windows應用程序的相關(guān)概念,Wind
4、ows應用程序中的數(shù)據(jù)類型及常量,typedefunsigned char BYTE typedefunsigned short WORD typedefunsigned long DWORD typedeflong LONG typedefchar *PSTR typedef char NEAR *NPST typedefchar FAR*LPSTR typedefvoid VOID #denfineWM_QUIT0X0012,Windows應用程序的相關(guān)概念,Windows應用程序中的數(shù)據(jù)類型及常量,類型 說明 CS 窗口類的風格(Class Style) IDI 預定義的圖標對象的標識符
5、(IDentity of Icon) IDC 預定義的光標對象的標識符(IDentity of Cursor) WS 窗口的風格(Windows Style) CW 創(chuàng)建窗口(Create Windows) WM 窗口消息(Windows Message) DT 繪制文本(Drawing Text),一些常見常量的前綴意義,Windows應用程序的相關(guān)概念,Windows應用程序中的數(shù)據(jù)類型及常量,在變量名的表示方法方面,Windows推薦使用一種稱為“匈牙利表示法”的方法。每個變量名用小寫字母或描述了變量的數(shù)據(jù)類型的字母作為前綴,變量的名字緊跟其后,且用大寫字母開始的單詞(一個或多個單詞)表
6、示其含義,這樣每個變量都能附加上其數(shù)據(jù)類型的助記符。例如:WORDwOffset ;/ w表示W(wǎng)ORD類型 DWORD dwValue ; / dw表示DWORD類型,Windows應用程序的相關(guān)概念,Windows應用程序中的數(shù)據(jù)類型及常量,類型 說明 b BOOL,布爾類型 by BYTE類型 c char類型 dw DWORD類型 l LONG類型 lp 遠(長)指針(long pointer) n 短整型 p 指針 s 字符串,VC+編程環(huán)境介紹,1 Visual C+簡介,是Windows環(huán)境下最主要的應用開發(fā)系統(tǒng)之一 是C+語言的集成開發(fā)環(huán)境 與Win32緊密相連 強大的調(diào)試功能為
7、大型復雜軟件的開發(fā)提供了有效的排錯手段,2 可視化,指軟件開發(fā)階段的可視化 利用計算機圖形技術(shù)和方法,VC+編程環(huán)境介紹,3 開發(fā)環(huán)境,(1) VC+的菜單欄 - File菜單,斷點作用: 中斷程序的執(zhí)行過程,以便檢查程序代碼、變量和寄存器值,用來設(shè)置 刪除和 查看斷點,提供有效 的成員名,在View菜單中可以: 改變窗口 改變工具欄的顯示方式 檢查源代碼 激活調(diào)試等,(a-1) ClassWizard 中的Message Maps選項卡,為窗口、對話框、控件、菜單選項和加速鍵等對象映射消息,創(chuàng)建或刪除消息處理函數(shù),查看編輯消息處理函數(shù)的代碼,(a-2) Member Variables選項卡
8、: 定義成員變量用于自動初始化 其中: Control IDs是映射到成員變量的控件ID值 Type是成員變量的類型 Member是成員變量名,(b) Resource Symbols選項 該選項將打開資源符號瀏覽器,從中可以瀏覽資源編輯符號,資源編輯符號是映射到整數(shù)值上的一串字符,相當于資源的一個代號,在同一個程序中,資源編輯符號不能重復,(c) Resource Includes選項,該對話框包含資源符號頭文件名和預處理指令。,(a) New Class選項 該選項用來創(chuàng)建新類并添加到項目中,(4) VC+的菜單欄-Insert菜單,使用Project可以創(chuàng)建、修改和存儲正在編輯的工程文件
9、 工程文件組合了一個應用程序的所有源文件的組成部分。工程文件包含在擴展名為.MAK的文件中。,(5) VC+的菜單欄 - Project菜單,(b) Add To Project選項 選擇該選項將打開一個級聯(lián)子菜單,通過級連子菜單,可以把文件、文件夾、數(shù)據(jù)鏈接以及VC組件或控件添加到當前工程文件中,(a) Set Active Project選項 設(shè)定指定的項目為工作區(qū)的活動項目,(c) Settings選項 選擇該選項將彈出Project Settings對話框,其中 General選項卡用來設(shè)置基礎(chǔ)類用法和目錄,指出應用程序與MFC的鏈接方式,指出所建立的應用程序的 缺省位置為Debug目
10、錄,輸出文件的位置,Build菜單用于編譯、建立和執(zhí)行應用程序,(6) V C+的菜單欄-Build菜單,(e) Start Debug選項,從當前語句開始執(zhí) 行程序直到遇到斷 點或遇到程序結(jié)束,單步執(zhí)行程序, 并在遇到函數(shù)調(diào) 用時進入函數(shù)內(nèi) 部再從頭單步執(zhí)行,使程序在運行到當前光 標所在位置時停止(相當 于設(shè)置一個臨時斷點),調(diào)試過程中直 接進入到正在 運行的進程中,(a)Source Browse選項 編譯器在建立項目時會創(chuàng)建與項目中每一程序文件信息有關(guān)的.SBR文件。 BSCMAKE程序?qū)⑦@些.SBR文件匯編為單個瀏覽信息數(shù)據(jù)庫,選擇Source Browse將 彈出瀏覽窗口,它顯 示與
11、程序中所有符號 (類、函數(shù)、數(shù)據(jù)、宏 和類型)有關(guān)的信息,(7) VC+的菜單欄-Tools菜單,在工作區(qū)中添加項目: 用File-Open選項可打開已存在的項目;通過New對話框的Projects選項卡創(chuàng)建新的項目,并選擇Add to current workspace復選框。,VC以項目工作區(qū) 的形式來組織文件、 項目和項目配置,1. 創(chuàng)建新的項目工作區(qū),創(chuàng)建新的空工作區(qū)步驟: (a) File-New-Workspaces- 輸入工作區(qū)名字并指定工作區(qū)目錄,在VC中,源代碼或資源編輯器為了引用資源和用戶自定義的其它對象,于是就引入了一種與資源一一對應的符號即資源符號,使之能夠以字符串的方
12、式被引用。 資源符號是映射到整數(shù)值上的一串字符,是一種標識符。每當創(chuàng)建一個新的資源或資源對象時,系統(tǒng)就會為其提供一個缺省的資源符號名稱并賦一個整數(shù)值,該定義保存在resource.h文件中。,資源是一種界面元素, 用戶可以從中獲得信息 并在其中執(zhí)行某個動作,資源及資源編輯器,VC Programmers Guide:VC程序員指南。 VC Users Guide:VC用戶指南。 VC Tutorials:VC教程。 MFC and Templates:微軟基礎(chǔ)類庫和模板參考信息。 Languages and Libraries for C+:C+語言和庫文件信息。,VC幫助系統(tǒng) 主要提供五 個
13、方面內(nèi)容,聯(lián)機幫助,VC+交互編程基礎(chǔ),MFC是用來編寫Windows應用程序的C+類集,該類集以層次結(jié)構(gòu)組織起來,其中封裝了大部分Windows API函數(shù)和Windows控件,它所包含的功能涉及到整個Windows操作系統(tǒng)。 MFC不僅為用戶提供了 Windows圖形環(huán)境下應用程序的框架,而且還提供了創(chuàng)建應用程序的組件。,MFC庫中的類按層次關(guān)系劃分類: (1)根類:CObject (2)應用程序體系結(jié)構(gòu)類 (3)窗口、對話框和控件類 (4)繪圖和打印類 (5)簡單數(shù)據(jù)類型類 (6)數(shù)組、列表和映射類 (7)文件和數(shù)據(jù)庫類 (8)Internet和網(wǎng)絡工作類 (9)OLE類 (10)調(diào)試和
14、異常類,VC+交互編程基礎(chǔ),應用程序體系結(jié)構(gòu)類,應用程序體系結(jié)構(gòu)類,可視對象類,1窗口類:CWnd類,CWnd提供了MFC中所有窗口類的基本功能,是CCmdTarget類的子類,可視對象類,可視對象類,可視對象類,VC+交互編程基礎(chǔ),MFC 中全局函數(shù)和全局變量,AfxAbort: 無條件終止一個應用程序 AfxBeginThread: 創(chuàng)建一個新線程并執(zhí)行它 AfxEndThread: 終止當前正在執(zhí)行的線程 AfxMessageBox: 顯示一個Windows消息框 AfxGetApp: 返回當前應用程序?qū)ο蟮闹羔?AfxGetInstanceHandle:返回標識當前應用程序?qū)ο蟮木浔?
15、AfxRegisterWndClass: 注冊用于創(chuàng)建Windows窗口的窗口類 theApp 應用程序唯一的全局對象,應用程序向?qū)?應用程序向?qū)?應用程序向?qū)?應用程序向?qū)?應用程序向?qū)?應用程序向?qū)?應用程序向?qū)?應用程序向?qū)?圖形設(shè)備接口GDI,Windows圖形設(shè)備接口(GDI)是為與設(shè)備無關(guān)的圖形設(shè)計的。所謂設(shè)備的無關(guān)性,就是操作系統(tǒng)屏蔽了硬件設(shè)備的差異,因而設(shè)備無關(guān)性能使用戶編程時無需考慮特殊的硬件設(shè)置。 GDI負責系統(tǒng)與用戶或繪圖程序之間的信息交換,并控制在輸出設(shè)備上顯示圖形或文字。,GDI的一些概念 繪圖工具對象 繪圖函數(shù) 文本的顯示,圖形設(shè)備接口GDI,GDI的一些概念 繪圖
16、工具對象 繪圖函數(shù) 文本和字體,圖形設(shè)備接口GDI,Windows系統(tǒng),外設(shè),直接訪問,統(tǒng)一的設(shè)備環(huán)境(DC),使應用程序與設(shè)備相連,用戶,GDI的一些概念,設(shè)備環(huán)境(上下文)DC,GDI的一些概念,CDC類,CDC類提供與繪圖有關(guān)的所有操作函數(shù),如:繪圖工具對象的選擇;繪圖屬性、映射模式、視口等的設(shè)置;提供坐標轉(zhuǎn)換、裁剪和繪制簡單圖形、顯示文本的函數(shù)等。 派生自CDC類的還有CPaintDC、 CClientDC、 CWindowDC 、CMetaFileDC。,GDI的一些概念,CDC類,CreateDC、CreateCompatibleDC、DeleteDC Attach、Detach
17、GetCurrentBrush、GetCurrentFont、GetCurrentPalette、GetCurrentPen、GetWindow SelectObject、SelectStockObject SelectPalette、RealizePalette GetBkColor、SetBkColor、GetBkMode、SetBkMode、GetPolyFillMode、SetPolyFillMode、GetROP2、SetROP2、GetStretchBltMode、SetStretchBltMode、GetTextColor、SetTextColor GetMapMode、SetM
18、apMode、GetViewportExt、SetViewportExt、GetWindowExt、SetWindowExt PatBlt、BitBlt、StretchBlt、GetPixel、SetPixel,圖形刷新,(1) 刷新請求,窗口大小的調(diào)整 窗口移動 被覆蓋后的恢復,GDI的一些概念,GDI的一些概念,(2) 系統(tǒng)對刷新請求的響應 當用戶區(qū)的內(nèi)容需要刷新時,系統(tǒng)向應用程序消息隊列發(fā)送WM_PAINT消息,三種 刷新,窗口移動后的刷新 被覆蓋區(qū)域的刷新 對象穿越后的刷新 (系統(tǒng)自動完成),用戶區(qū)移動或顯示 用戶窗口大小改變 程序通過滾動條滾動窗口,窗口被另一個窗口覆蓋的 恢復如下拉
19、式菜單關(guān)閉等,光標穿過用戶區(qū) 圖標拖過用戶區(qū),窗口被另一個窗口覆蓋的區(qū)域稱為無效區(qū)域。 Windows系統(tǒng)為每個窗口建立了一個PAINTSTRUCT結(jié)構(gòu),該結(jié)構(gòu)中包含了包圍無效區(qū)域的一個最小矩形的結(jié)構(gòu)RECT,應用程序可以根據(jù)這個無效矩形執(zhí)行刷新操作。,typedef struct tagPAINTSTRUCT HDC hdc; /設(shè)備環(huán)境句柄 BOOL fErase; /一般取真值,表示擦除無效矩形的背景 RECT rcPaint;/無效矩形標識 BOOL fRestore; /系統(tǒng)保留 BOOL fIncUpdate;/系統(tǒng)保留 BYTE rgbReserved32;/系統(tǒng)保留 PAINT
20、STRUCT;,GDI的一些概念,常用的windows應用程序刷新窗口的方法,保存副本。刷新時將副本拷貝到相應的窗口中。,記錄事件。刷新時重新執(zhí)行這個曾經(jīng)發(fā)生的事件。,重新繪制。將圖形繪制處理程序放在消息WM_PAINT響應模塊中,刷新時重繪圖形。,(3) 有效的刷新方法,GDI的一些概念,激活刷新的MFC窗口類的函數(shù),GDI的一些概念,BOOL InvalidateRect( LPCRECT lpRect, BOOL bErase = TRUE );,BOOL Invalidate( BOOL bErase = TRUE );,void InvalidateRgn( HRGN hRgn, B
21、OOL bErase = TRUE );,獲取設(shè)備環(huán)境DC的方法,獲取設(shè)備環(huán)境是應用程序輸出圖形的先決條件,常用的兩種方法是調(diào)用函數(shù)BeginPaint或GetDC,1、應用程序響應WM_PAINT消息進行圖形刷新時,主要通過調(diào)用BeginPaint函數(shù)獲取設(shè)備環(huán)境 hdc=BeginPaint(hwnd, CDC* GetWindowDC( ); CClientDC( CWnd* pWnd );,由GetDC函數(shù)獲取的設(shè)備環(huán)境必須用ReleaseDC函數(shù)釋放。,GDI的一些概念,GDI的一些概念,獲取設(shè)備環(huán)境DC的方法,映像模式 映像模式定義了將邏輯單位轉(zhuǎn)化為設(shè)備的度量單位以及設(shè)備的x方向和
22、y方向,程序員可在一個統(tǒng)一的邏輯坐標系中操作而不必考慮輸出設(shè)備的坐標系。,窗口:對應邏輯坐標系上程序員設(shè)定的區(qū)域 視口:對應實際輸出設(shè)備上程序員設(shè)定的區(qū)域,GDI的一些概念,GDI的一些概念,窗口視區(qū)變換通常解決下面幾個方面的問題: (1)窗口邏輯坐標與視區(qū)設(shè)備坐標之間的轉(zhuǎn)換。 (2)用戶坐標系到屏幕坐標系,坐標軸方向可能改變,還有坐標原點的映射問題; (3)用戶坐標系中窗口區(qū)的圖形坐標轉(zhuǎn)換到視圖區(qū)上的坐標需要取整。 (4)如果視圖區(qū)水平分辨率和垂直分辨率不同,為了保持圖形不變形,還要進行比例變換。,GDI的一些概念,應用程序可獲取設(shè)備環(huán)境的當前映像模式,并根據(jù)需要設(shè)置映像模式。,GDI的一些
23、概念,CDC:GetMapMode CDC:SetMapMode int GetMapMode( ) const; virtual int SetMapMode( int nMapMode );,圖形設(shè)備接口GDI,GDI的一些概念 繪圖工具對象 繪圖函數(shù) 文本的顯示,CGdiObject,繪圖工具對象,1. 畫筆(CPen ),畫筆的創(chuàng)建 CPen( int nPenStyle, int nWidth, COLORREF crColor ); CPen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount
24、 = 0, const DWORD* lpStyle = NULL ); BOOL CreatePen( int nPenStyle, int nWidth, COLORREF crColor ); BOOL CreatePen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );,繪圖工具對象,PS_DASH PS_DASHDOT PS_DASHDOTDOT PS_DOT PS_INSIDEFRAME PS_NULL PS_SOLID
25、,創(chuàng)建畫筆后,必須調(diào)用SelectObject函數(shù)將其選入設(shè)備環(huán)境。,不再使用當前畫筆時,需刪除畫筆,以免占內(nèi)存 DeleteObject(hP);,繪圖工具對象,CPen pen(0,width,color); CPen* oldPen = pDC-SelectObject(,2.畫刷(CBrush ),CBrush( COLORREF crColor ); CBrush( int nIndex, COLORREF crColor ); CBrush( CBitmap* pBitmap ); BOOL CreateSolidBrush( COLORREF crColor ); BOOL Cr
26、eateHatchBrush( int nIndex, COLORREF crColor ); BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush ); BOOL CreatePatternBrush( CBitmap* pBitmap ); BOOL CreateDIBPatternBrush( HGLOBAL hPackedDIB, UINT nUsage ); BOOL CreateDIBPatternBrush( const void* lpPackedDIB, UINT nUsage ); BOOL CreateSysColorB
27、rush( int nIndex );,繪圖工具對象,CBrush brush; brush.CreateSysColorBrush(COLOR_BTNFACE); / Select the brush into the device context. CBrush* pOldBrush = (CBrush*)pDC-SelectObject(,繪圖工具對象,2.畫刷(CBrush ),BOOL CreatePalette( LPLOGPALETTE lpLogPalette ); BOOL CreateHalftonePalette( CDC* pDC ); UINT GetPaletteE
28、ntries( UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors ) const; UINT SetPaletteEntries( UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors );,繪圖工具對象,3.調(diào)色板(CPalette ),typedef struct tagPALETTEENTRY BYTE peRed; BYTE peGreen; BYTE peBlue; BYTE peFlags; PALETTEENTRY;,
29、typedef struct tagLOGPALETTE WORD palVersion; WORD palNumEntries; PALETTEENTRY palPalEntry1; LOGPALETTE;,BOOL CreateRectRgn( int x1, int y1, int x2, int y2 ); BOOL CreateRectRgnIndirect( LPCRECT lpRect ); BOOL CreateEllipticRgn( int x1, int y1, int x2, int y2 ); BOOL CreateEllipticRgnIndirect( LPCRE
30、CT lpRect ); BOOL CreatePolygonRgn( LPPOINT lpPoints, int nCount, int nMode ); BOOL CreatePolyPolygonRgn( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode ); BOOL CreateRoundRectRgn( int x1, int y1, int x2, int y2, int x3, int y3 ); int CombineRgn( CRgn* pRgn1, CRgn* pRgn2, int nC
31、ombineMode );,繪圖工具對象,4. CRgn,圖形設(shè)備接口GDI,GDI的一些概念 繪圖工具對象 繪圖函數(shù) 文本的顯示,CDC的繪圖函數(shù): CPoint GetCurrentPosition( ) const; CPoint MoveTo( int x, int y ); CPoint MoveTo( POINT point ); BOOL LineTo( int x, int y ); BOOL LineTo( POINT point ); BOOL Arc( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int
32、y4 ); BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd );,繪圖函數(shù),CDC的繪圖函數(shù): BOOL AngleArc( int x, int y, int nRadius, float fStartAngle, float fSweepAngle ); BOOL LineTo( int x, int y ); BOOL Polyline( LPPOINT lpPoints, int nCount ); BOOL PolyPolyline( const POINT* lpPoints, const DWORD* lpPolyPoin
33、ts, int nCount ); BOOL PolyBezier( const POINT* lpPoints, int nCount ); BOOL DrawIcon( int x, int y, HICON hIcon ); void DrawDragRect( LPCRECT lpRect, SIZE size, LPCRECT lpRectLast, SIZE sizeLast, CBrush* pBrush = NULL, CBrush* pBrushLast = NULL ); void Draw3dRect( LPCRECT lpRect, COLORREF clrTopLef
34、t, COLORREF clrBottomRight );,繪圖函數(shù),CDC的繪圖函數(shù): BOOL Chord( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); BOOL Chord( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); BOOL Pie( int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4 ); BOOL Pie( LPCRECT lpRect, POINT ptStart, PO
35、INT ptEnd );,繪圖函數(shù),CDC的繪圖函數(shù): BOOL Ellipse( int x1, int y1, int x2, int y2 ); BOOL Ellipse( LPCRECT lpRect ); BOOL Polygon( LPPOINT lpPoints, int nCount ); int SetPolyFillMode( int nPolyFillMode ); BOOL PolyPolygon( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount ); BOOL Rectangle( int x1, int y1, in
36、t x2, int y2 ); BOOL Rectangle( LPCRECT lpRect ); void DrawFocusRect( LPCRECT lpRect ); BOOL RoundRect( int x1, int y1, int x2, int y2, int x3, int y3 ); BOOL RoundRect( LPCRECT lpRect, POINT point );,繪圖函數(shù),圖形設(shè)備接口GDI,GDI的一些概念 繪圖工具對象 繪圖函數(shù) 文本和字體,文本和字體,使用定義好的與設(shè)備無關(guān)的字體集, Windows就能維護它的設(shè)備無關(guān)性,提供“所見即所得”的好處,即屏
37、幕所見與設(shè)備輸出的文本是一樣的。,文本和字體,邏輯字體定義的字符集是設(shè)備無關(guān)的,它可以精確標度,因此得到廣泛應用,物理字體是為特殊設(shè)備設(shè)計的,因而是設(shè)備相關(guān)的,字體 說明 ANSI_FIXED ANSI標準的固定寬度的字體 ANSI_VAR ANSI標準的可變寬度的字體 DEFAULT_GUI當前GUI的缺省字體 OEM_FIXED 由標準原設(shè)備制造商(OEM)提供 DEVICE_DEFAULT當前圖形設(shè)備的字體 SYSTEM_FIXEDWindows的標準固定寬度的字體 SYSTEM Windows提供的可變寬度的字體,Windows 系統(tǒng)提供了七種基本字體,文本和字體,CFont類 BOO
38、L CreateFontIndirect(const LOGFONT* lpLogFont ); BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename
39、 ); BOOL CreatePointFont( int nPointSize, LPCTSTR lpszFaceName, CDC* pDC = NULL ); BOOL CreatePointFontIndirect( const LOGFONT* lpLogFont, CDC* pDC = NULL );,文本和字體,typedef struct tagLOGFONT LONG lfHeight; LONG lfWidth; /字體高度、寬度 LONG lfEscapement; LONG lfOrientation; /字體角度 LONG lfWeight; /字體粗細度 BYTE
40、lfItalic; /字體是否傾斜 BYTE lfUnderline; /字體是否有下劃線 BYTE lfStrikeOut; /字體是否有中劃線 BYTE lfCharSet; /字體所屬字符集 BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceNameLF_FACESIZE; /字體名 LOGFONT, *PLOGFONT;,文本和字體,CFont類 CClientDC dc(this); CFont font; VERIFY(font.CreatePo
41、intFont(120, Arial, ,文本和字體,設(shè)置字體和背景顏色(CDC),virtual COLORREF SetBkColor( COLORREF crColor ); int SetBkMode( int nBkMode ); virtual COLORREF SetTextColor( COLORREF crColor );,輸出文字(CDC),virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount ); BOOL TextOut( int x, int y, const CString,GDI編程的
42、幾個問題,CRgn類 位圖相關(guān)知識 映射模式與窗口-視口變換 MFC中的MVC模式 編程實例解析,CRgn類,CRgn類的主要方法:,1、創(chuàng)建各類多邊形區(qū)域: BOOL CreateRectRgn( int x1, int y1, int x2, int y2 ); BOOL CreateEllipticRgn( int x1, int y1, int x2, int y2 ); BOOL CreateRoundRectRgn( int x1, int y1, int x2, int y2, int x3, int y3 ); BOOL CreatePolygonRgn( LPPOINT lp
43、Points, int nCount, int nMode ); BOOL CreatePolyPolygonRgn( LPPOINT lpPoints, LPINT lpPolyCounts, int nCount, int nPolyFillMode ); BOOL CreateFromPath( CDC* pDC ); BOOL CreateFromData( const XFORM* lpXForm, int nCount, const RGNDATA* pRgnData );,CRgn類,CRgn類的主要方法:,2、用于多邊形區(qū)域的交互拾?。?BOOL PtInRegion( int
44、 x, int y ) const; BOOL RectInRegion( LPCRECT lpRect ) const;,CRgn類還用于CDC類的裁剪操作: int SelectClipRgn( CRgn* pRgn, int nMode ); virtual BOOL PtVisible( int x, int y ) const; virtual BOOL RectVisible( LPCRECT lpRect ) const; virtual int OffsetClipRgn( int x, int y ); int ExcludeUpdateRgn( CWnd* pWnd );,
45、CRgn類,CRgn用于多邊形區(qū)域的交互拾取例子,鼠標當前位置,構(gòu)造線段的選擇矩形區(qū)域,直線的交互拾取,CRgn類,CRgn用于多邊形區(qū)域的交互拾取例子,橢圓的交互拾取實例代碼 BOOL CGDI_ExeDoc:GetEllipseAt(CRect ,位圖相關(guān)知識,1、位圖相關(guān)數(shù)據(jù)結(jié)構(gòu) 2、DIB /位圖文件類型,“BM ” DWORD bfSize; /位圖文件大小,單位字節(jié) WORD bfReserved1;/保留字,取0 WORD bfReserved2; /保留字,取0 DWORD bfOffBits; /文件頭到位圖數(shù)據(jù)的偏移量 BITMAPFILEHEADER, *PBITMAPF
46、ILEHEADER;,位圖相關(guān)知識,1、位圖相關(guān)數(shù)據(jù)結(jié)構(gòu),typedef struct tagBITMAPINFOHEADER DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; BITMAPINFOHEADER, *PBITMAPINFOHEADER;,位
47、圖相關(guān)知識,1、位圖相關(guān)數(shù)據(jù)結(jié)構(gòu),typedef struct tagBITMAPINFO BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors1; BITMAPINFO, *PBITMAPINFO; typedef struct tagRGBQUAD BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; RGBQUAD;,位圖相關(guān)知識,1、位圖相關(guān)數(shù)據(jù)結(jié)構(gòu),typedef struct tagBITMAP LONG bmType; /位圖類型 LONG bmWidth; /位圖寬 LONG
48、 bmHeight; /位圖高 LONG bmWidthBytes; /位圖數(shù)據(jù)每行字節(jié)數(shù) WORD bmPlanes; /位圖色平面數(shù) WORD bmBitsPixel; /位圖像素的位數(shù) LPVOID bmBits; /位圖像素數(shù)據(jù) BITMAP, *PBITMAP;,位圖相關(guān)知識,2、DIB(Device-Independent Bitmap ) DDB(Device-Dependent Bitmap ),在Windows系統(tǒng)中,那些以BMP或DIB為擴展名的文件都是設(shè)備無關(guān)位圖文件。 DIB文件由四個部分組成: BITMAPFILEHEADER BITMAPINFOHEADER RGB
49、QUAD 位圖圖像數(shù)據(jù) 設(shè)備相關(guān)位圖則通常在內(nèi)存中創(chuàng)建,它不帶調(diào)色板信息,其顏色由與它相關(guān)的設(shè)備決定。通常由CBitmap類來創(chuàng)建管理。,位圖相關(guān)知識,3、CBitmap類,1、位圖數(shù)據(jù)操作: int GetBitmap( BITMAP* pBitMap ); DWORD SetBitmapBits( DWORD dwCount, const void* lpBits ); DWORD GetBitmapBits( DWORD dwCount, LPVOID lpBits ) const; CSize SetBitmapDimension( int nWidth, int nHeight );
50、 CSize GetBitmapDimension( ) const;,位圖相關(guān)知識,3、CBitMap類,2、創(chuàng)建位圖: BOOL LoadBitmap( UINT nIDResource ); BOOL CreateBitmap( int nWidth, int nHeight, UINT nPlanes, UINT nBitcount, const void* lpBits ); BOOL CreateBitmapIndirect( LPBITMAP lpBitmap ); BOOL CreateCompatibleBitmap( CDC* pDC, int nWidth, int nH
51、eight ); BOOL CreateDiscardableBitmap( CDC* pDC, int nWidth, int nHeight );,位圖相關(guān)知識,4、CDC中相關(guān)位圖操作,/將一個位圖從一個DC拷貝至另一個DC BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); /將樣式畫刷相關(guān)的位圖拷貝至DC BOOL PatBlt( int x, int y, int nWidth, int nHeight, DWORDdwRop );,位
52、圖相關(guān)知識,4、CDC中相關(guān)位圖操作,int SetStretchBltMode( int nStretchMode ); /將一個位圖從一個DC拷貝至另一個DC,可顯示壓縮位圖 BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );,位圖相關(guān)知識,4、CDC中相關(guān)位圖操作,BOOL MaskBlt( int x, int y, int nWidth, int nHeight, CD
53、C* pSrcDC, int xSrc, int ySrc, CBitmap,位圖相關(guān)知識,位圖應用實例,C*View:C*View() m_pMapBmp = new CBitmap; m_bEnableUpDateClientWindow = FALSE; void C*View:OnInitialUpdate() CClientDC dc(this); int nBmpWidth = :GetSystemMetrics(SM_CXSCREEN); int nBmpHeight = :GetSystemMetrics(SM_CYSCREEN); m_pMapBmp-CreateCompat
54、ibleBitmap( ,位圖相關(guān)知識,位圖應用實例,void C*View:OnDraw(CDC* pDC) CDC* pMemDC = new CDC; if (!pMemDC-CreateCompatibleDC(pDC) return; CBitmap* pOldBmp = pMemDC-SelectObject(m_pMapBmp); if(m_bEnableUpDateClientWindow = TRUE) BeginWaitCursor(); m_GMDataManage.GMF_ShowWorkSpace(pMemDC, rClient); EndWaitCursor();
55、m_bEnableUpDateClientWindow = FALSE; pDC-BitBlt(0, 0, rClient.Width(), rClient.Height(), pMemDC, 0, 0, SRCCOPY); pMemDC-SelectObject(pOldBmp); delete pMemDC; ,映射模式與窗口-視口變換,窗口-視口變換通常完成邏輯坐標系和設(shè)備坐標系之間的坐標變換,在GIS軟件中通常是地理坐標系(或高斯直角坐標系)與設(shè)備坐標系之間的變換。坐標變換與映射模式有著直接的關(guān)聯(lián)。,映射模式與窗口-視口變換,CDC類中關(guān)于坐標變換的函數(shù): /設(shè)備坐標到邏輯坐標 voi
56、d DPtoLP( LPPOINT lpPoints, int nCount = 1 ) const; void DPtoLP( LPRECT lpRect ) const; void DPtoLP( LPSIZE lpSize ) const; /設(shè)備坐標到邏輯坐標 void LPtoDP( LPPOINT lpPoints, int nCount = 1 ) const; void LPtoDP( LPRECT lpRect ) const; void LPtoDP( LPSIZE lpSize ) const;,映射模式與窗口-視口變換,CDC類中關(guān)于坐標變換的函數(shù): void DPto
57、HIMETRIC( LPSIZE lpSize ) const; void HIMETRICtoDP( LPSIZE lpSize ) const; void LPToHIMETRIC( LPSIZE lpSize ) const; void HIMETRICtoLP( LPSIZE lpSize ) const; /與映射模式和窗口、視口設(shè)置有關(guān)的主要函數(shù) virtual int SetMapMode( int nMapMode ); virtual CPoint SetViewportOrg( int x, int y ); virtual CSize SetViewportExt( in
58、t cx, int cy ); CPoint SetWindowOrg( int x, int y ); virtual CSize SetWindowExt( int cx, int cy );,映射模式與窗口-視口變換,例程坐標變換實例,/設(shè)備坐標轉(zhuǎn)換為邏輯坐標,映射模式為MM_TEXT void CGDI_ExeView:ClientToDoc(CPoint ,映射模式與窗口-視口變換,例程坐標變換實例,/邏輯坐標轉(zhuǎn)換為設(shè)備坐標,注意不同映射模式的轉(zhuǎn)換結(jié)果不同 void CGDI_ExeView:DocToClient(CPoint ,映射模式與窗口-視口變換,GIS中坐標變換實例,CPoint DocToClient(GMS_3DPOINT ,映射模式與窗口-視口變換,GIS中坐標變換實例,GMS_3DPOINT ClientToDoc(CPoint point) GMS_3DPOINT dpoint; dpoint.X = (point.x-m_dDX)/m_dScale; dpoint.Y = (point.y-m_dDY)/(-m_dScale); dpoint.H = 0.0; re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 苓桂術(shù)甘湯“以化為用”調(diào)節(jié)星形膠質(zhì)細胞內(nèi)化降解β淀粉樣蛋白機制研究
- 內(nèi)蒙古呼和浩特地區(qū)驢隱孢子蟲和畢氏腸微孢子蟲分子流行病學調(diào)查研究
- 2025年硅表面拼接帶項目投資可行性研究分析報告
- 寧德時代ESG實踐對企業(yè)績效的影響及路徑研究
- 生態(tài)文化公園人與自然和諧共生的典范
- 2025年中國甜柿苗行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告
- 困難職工貧困申請書
- 基于城市道路行程時間預測的動態(tài)路徑誘導研究
- IRAK-M通過PD-L1參與哮喘氣道炎癥和氣道重塑及其相關(guān)機制的研究
- 個人數(shù)據(jù)財產(chǎn)權(quán)民法保護規(guī)則研究
- 2025年春季學期學校德育工作計劃及安排表
- 2024年05月浙江金華成泰農(nóng)商銀行員工招考筆試歷年參考題庫附帶答案詳解
- 帶看協(xié)議書范本(2篇)
- 2025-2030年中國科教玩具行業(yè)發(fā)展動態(tài)及前景趨勢分析報告新版
- 馬匹寄養(yǎng)協(xié)議書
- 四年級數(shù)學脫式計算練習題100道
- 第一課 追求向上向善的道德(課時1)(課件)
- 2024年新蘇教版六年級下冊科學全冊精編課件
- NB-T 47013.1-2015 承壓設(shè)備無損檢測 第1部分-通用要求
- GB/T 13912-2020金屬覆蓋層鋼鐵制件熱浸鍍鋅層技術(shù)要求及試驗方法
- 食品添加劑、食品污染物的本底與轉(zhuǎn)化來源
評論
0/150
提交評論