日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows GDI和GDI+编程实例剖析(1)

發布時間:2025/3/15 windows 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows GDI和GDI+编程实例剖析(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Windows GDIGDI+編程實例剖析(1) 作者:宋寶華 ?e-mail:21cnbao@21cn.com 1.基本概念 GDIWindows中定義為Graphics Device Interface,即圖形設備接口,是Windows API(Application Programming Interface)的一個重要組成部分。它是Windows圖形顯示程序與實際物理設備之間的橋梁,GDI使得用戶無需關心具體設備的細節,而只需在一個虛擬的環境(即邏輯設備)中進行操作。它的橋梁作用體現在: 1)用戶通過調用GDI函數將邏輯空間的操作轉化為具體針對設備驅動程序的調用; 為實現圖形設備無關性,Windows 的繪圖操作在一個設備描述表上進行。用戶擁有自己的“邏輯坐標”系統,它獨立于實際的物理設備,與“設備坐標”相對應。開發Windows應用程序時,程序員關心的是邏輯坐標,我們在邏輯坐標系上繪圖,利用GDI將邏輯窗口映射到物理設備上。 2GDI能檢測具體設備的能力,并依據具體的設備以最優方式驅動這些設備,完成真實的顯示。 ?GDI函數大致可分類為:設備上下文函數(如GetDC、CreateDC、DeleteDC)、畫線函數(如LineToPolyline、Arc)、填充畫圖函數(如Ellipse、FillRect、Pie)、畫圖屬性函數(如SetBkColor、SetBkModeSetTextColor)、文本、字體函數(如TextOut、GetFontData)、位圖函數(如SetPixel、BitBlt、StretchBlt)、坐標函數(如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen)、映射函數(如SetMapMode、SetWindowExtEx、SetViewportExtEx)、元文件函數(如PlayMetaFile、SetWinMetaFileBits)、區域函數(如FillRgnFrameRgn、InvertRgn)、路徑函數(如BeginPathEndPath、StrokeAndFillPath)、裁剪函數(如SelectClipRgn、SelectClipPath)等。 ?GDI雖然使程序員得到了一定程度的解脫,但是其編程方式仍很麻煩。譬如,顯示一張位圖,程序員需要進行“裝入位圖―讀取位圖文件頭信息―啟用設備場景―調色板變換”等一連串操作。而有了GDI+,這些問題便迎刃而解了。 顧名思義,GDI+GDI的增強版。它是微軟在Windows 2000以后操作系統中提供的新接口,其通過一套部署為托管代碼的類來展現,這套類被稱為GDI+的“托管類接口”。GDI+主要提供了以下三類服務: (1) 二維矢量圖形:GDI+提供了存儲圖形基元自身信息的類(或結構體)、存儲圖形基元繪制方式信息的類以及實際進行繪制的類; (2) 圖像處理:大多數圖片都難以劃定為直線和曲線的集合,無法使用二維矢量圖形方式進行處理。因此,GDI+為我們提供了BitmapImage等類,它們可用于顯示、操作和保存BMPJPG、GIF等圖像格式。 (3) 文字顯示:GDI+支持使用各種字體、字號和樣式來顯示文本。 GDI接口是基于函數的,而GDI+是基于C++類的對象化的應用程序編程接口,因此使用起來比GDI要方便。 2.例程簡述 本文后續的講解都基于這樣的一個例子工程(例程的開發環境為Visual C++6.0,操作系統為Windows XP),它是一個基于對話框的MFC應用程序,包括2個父菜單: (1)??? GDI GDI父菜單下包括一個子菜單: IDIDM_GDI_DRAW_LINE ???? caption:畫線 單擊事件:在窗口繪制正旋曲線 (2)??? GDI+ DIB位圖父菜單下包括兩個子菜單: a. IDIDM_GDIP_DRAW_LINE ???? ???caption:畫線 單擊事件:在窗口繪制正旋曲線 b. caption:新增功能,其下又包括下列子菜單: (ⅰ)IDIDM_Gradient_Brush ???? caption:漸變畫刷 單擊事件:在窗口演示GDI+的漸變畫刷功能 (ⅱ)IDIDM_Cardinal_Spline ??? caption:基數樣條 單擊事件:在窗口演示GDI+的基數樣條函數功能 (ⅲ)IDIDM_Transformation_Matrix caption:變形和矩陣對象 單擊事件:在窗口演示GDI+的變形和矩陣對象功能 (ⅳ)IDIDM_Scalable_Region ? caption:可伸縮區域 單擊事件:在窗口演示GDI+的可伸縮區域功能 IDIDM_IMAGE ????? caption:圖像 單擊事件:在窗口演示GDI+的多種圖像格式支持功能 IDIDM_Alpha_Blend ?? captionAlpha混合 單擊事件:在窗口演示GDI+Alpha混合功能 IDIDM_TEXT caption:文本 單擊事件:在窗口演示GDI+的強大文本輸出能力 后續篇章將集中在對上述菜單單擊事件消息處理函數的講解,下面的代碼是整個對話框類CGdiexampleDlg的消息映射: BEGIN_MESSAGE_MAP(CGdiexampleDlg, CDialog) //{{AFX_MSG_MAP(CGdiexampleDlg) ? ON_WM_SYSCOMMAND() ? ON_WM_PAINT() ? ON_WM_QUERYDRAGICON() ? ON_COMMAND(IDM_GDI_DRAW_LINE, OnGdiDrawLine) ? ON_COMMAND(IDM_GDIP_DRAW_LINE, OnGdipDrawLine) ? ON_COMMAND(IDM_Gradient_Brush, OnGradientBrush) ? ON_COMMAND(IDM_Cardinal_Spline, OnCardinalSpline) ? ON_COMMAND(IDM_Transformation_Matrix, OnTransformationMatrix) ? ON_COMMAND(IDM_Scalable_Region, OnScalableRegion) ? ON_COMMAND(IDM_IMAGE, OnImage) ? ON_COMMAND(IDM_Alpha_Blend, OnAlphaBlend) ? ON_COMMAND(IDM_TEXT, OnText) //}}AFX_MSG_MAP END_MESSAGE_MAP()

總結

以上是生活随笔為你收集整理的Windows GDI和GDI+编程实例剖析(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。