GDI函數(shù)有很多,我們大致可以把它們分成如下幾類:
· 設(shè)備上下文(Device Context,簡稱DC)函數(shù),如GetDC、CreateDC、DeleteDC等;
· 畫線函數(shù),如LineTo、Polyline、Arc等;
· 填充畫圖函數(shù),如Ellipse、FillRect、Pie等;
· 畫圖屬性函數(shù),如SetBkColor、SetBkMode、SetTextColor等;
· 文本、字體函數(shù),如TextOut、GetTextExtentPoint32、GetFontData等;
· 位圖函數(shù),如SetPixel、BitBlt、StretchBlt等;
· 坐標(biāo)函數(shù),如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen等;
· 映射函數(shù),如SetMapMode、SetWindowExtEx、SetViewportExtEx等;
· 元文件(MetaFile)函數(shù),如PlayMetaFile、SetWinMetaFileBits等;
· 區(qū)域(Region)函數(shù),如FillRgn、FrameRgn、InvertRgn等;
· 路徑(Path)函數(shù),如BeginPath、EndPath、StrokeAndFillPath等;
· 裁剪(Clipping)函數(shù),如SelectClipRgn、SelectClipPath等。
上述這些函數(shù)可以完成繪制用戶界面中的各個部分,包括我們在Windows平臺上司空見慣的窗口、菜單、工具條、按鈕等。除了完成顯示操作功能外,GDI還提供了一些繪圖對象,用以渲染顯示。這些GDI對象包括:
設(shè)備上下文(DC)——具有如顯示器或打印機等輸出設(shè)備的繪圖屬性信息的數(shù)據(jù)結(jié)構(gòu);
畫筆(Pen)——用于繪制線條;
畫刷(Brush)——用于圖案的填充;
字體(Font)——用于確定文本字符的樣式;
位圖(Bitmap)——用于存儲圖像;
調(diào)色板(Palette)——屏幕上畫圖時可以使用的一些顏色的集合。
DC在GDI中是一個非常重要的概念。在MSDN上查看各個GDI函數(shù)的使用說明,我們會發(fā)現(xiàn)大部分GDI函數(shù)都有一個HDC類型的參數(shù);HDC就是DC句柄。Windows應(yīng)用程序進行圖形、圖像處理的一般操作步驟如下:
1. 取得指定窗口的DC;
2. 確定使用的坐標(biāo)系及映射方式;
3. 進行圖形、圖像或文字處理;
4. 釋放所使用的DC。
為了進一步簡化GDI函數(shù)的使用,或者說為了適應(yīng)面向?qū)ο蟮某绦蛟O(shè)計風(fēng)格,微軟的MFC類庫提供了幾個DC的封裝類。我們知道,絕大部分MFC類都是從 CObject類派生的,CDC類也不例外。我們看到,CDC類是最基本的DC封裝類;它幾乎對應(yīng)封裝了所有的GDI函數(shù)。另外,CDC類的各個派生類各有專門的用途:
CClientDC——在窗口的客戶區(qū)畫圖的DC;
CMetaFileDC——用于操作Windows元文件的DC;
CPaintDC——響應(yīng)WM_PAINT消息時畫圖使用的DC,多見于MFC程序的OnDraw函數(shù)中;
CWindowDC——在整個窗口范圍(包括框架、工具條等)中畫圖的DC。
MFC除了對DC進行類封裝外,對其它GDI對象也進行了類封裝。