GDI編程基礎(轉貼)

http://www.cnblogs.com/SunJavaLiu/articles/251463.html

 http://blog.csdn.net/byxdaz/article/details/5949590

 

http://aiyzda.blog.163.com/blog/static/1755381822011619848992/

GDI(Graphics Device Interface,圖形設備接口)是在Windows平臺上處理圖形、圖像的方法,它是一套API函數;它們功能豐富,使用起來簡單、靈活。下面,我們首先來介紹一些GDI編程的基礎知識。

GDI函數有很多,我們大致可以把它們分成如下幾類:

  · 設備上下文(Device Context,簡稱DC)函數,如GetDC、CreateDC、DeleteDC等;

  · 畫線函數,如LineTo、Polyline、Arc等;

  · 填充畫圖函數,如Ellipse、FillRect、Pie等;

  · 畫圖屬性函數,如SetBkColor、SetBkMode、SetTextColor等;

  · 文本、字體函數,如TextOut、GetTextExtentPoint32、GetFontData等;

  · 位圖函數,如SetPixel、BitBlt、StretchBlt等;

  · 座標函數,如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen等;

  · 映射函數,如SetMapMode、SetWindowExtEx、SetViewportExtEx等;

  · 元文件(MetaFile)函數,如PlayMetaFile、SetWinMetaFileBits等;

  · 區域(Region)函數,如FillRgn、FrameRgn、InvertRgn等;

  · 路徑(Path)函數,如BeginPath、EndPath、StrokeAndFillPath等;

  · 裁剪(Clipping)函數,如SelectClipRgn、SelectClipPath等。

  上述這些函數可以完成繪製用戶界面中的各個部分,包括我們在Windows平臺上司空見慣的窗口、菜單、工具條、按鈕等。除了完成顯示操作功能外,GDI還提供了一些繪圖對象,用以渲染顯示。這些GDI對象包括:

  設備上下文(DC)——具有如顯示器或打印機等輸出設備的繪圖屬性信息的數據結構;

  畫筆(Pen)——用於繪製線條;

  畫刷(Brush)——用於圖案的填充;

  字體(Font)——用於確定文本字符的樣式;

  位圖(Bitmap)——用於存儲圖像;

  調色板(Palette)——屏幕上畫圖時可以使用的一些顏色的集合。

  DC在GDI中是一個非常重要的概念。在MSDN上查看各個GDI函數的使用說明,我們會發現大部分GDI函數都有一個HDC類型的參數;HDC就是DC句柄。Windows應用程序進行圖形、圖像處理的一般操作步驟如下:

  1. 取得指定窗口的DC;

  2. 確定使用的座標系及映射方式;

  3. 進行圖形、圖像或文字處理;

  4. 釋放所使用的DC。

   爲了進一步簡化GDI函數的使用,或者說爲了適應面向對象的程序設計風格,微軟的MFC類庫提供了幾個DC的封裝類。我們知道,絕大部分MFC類都是從CObject類派生的,CDC類也不例外。我們看到,CDC類是最基本的DC封裝類;它幾乎對應封裝了所有的GDI函數。另外,CDC類的各個派生類各 有專門的用途:

  CClientDC——在窗口的客戶區畫圖的DC;

  CMetaFileDC——用於操作Windows元文件的DC;

  CPaintDC——響應WM_PAINT消息時畫圖使用的DC,多見於MFC程序的OnDraw函數中;

  CWindowDC——在整個窗口範圍(包括框架、工具條等)中畫圖的DC。

  MFC除了對DC進行類封裝外,對其它GDI對象也進行了類封裝。 

   CGdiObject——GDI對象的父類,定義了GDI對象封裝類的一些公有函數接口;

  CBitmap——位圖相關操作的封裝類,包括位圖的裝入或創建等;

  CBrush——畫刷對象的封裝類;

  CFont——字體屬性及相關操作的封裝類;

  CPalette——調色板的封裝類;

  CPen——畫筆對象的封裝類;

  CRgn——區域對象以及區域相關操作的封裝類。

發佈了41 篇原創文章 · 獲贊 20 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章