GDI
GDI是Graphics Device Interface的縮寫,含義是圖形設(shè)備接口蜒茄,它的主要任務(wù)是負(fù)責(zé)系統(tǒng)與繪圖程序之間的信息交換唉擂,處理所有Windows程序的圖形輸出。
GDI具有如下特點(diǎn):
- 不允許程序直接訪問物理顯示硬件扩淀,通過稱為“設(shè)備環(huán)境”的抽象接口間接訪問顯示硬件楔敌;
- 程序需要與顯示硬件(顯示器、打印機(jī)等) 進(jìn)行通訊時(shí),必須首先獲得與特定窗口相關(guān)聯(lián)的設(shè)備環(huán)境驻谆;
- 用戶無需關(guān)心具體的物理設(shè)備類型卵凑;
- Windows參考設(shè)備環(huán)境的數(shù)據(jù)結(jié)構(gòu)完成數(shù)據(jù)的輸出。
GDI函數(shù)大致可分類為:
設(shè)備上下文函數(shù)(如GetDC胜臊、CreateDC勺卢、DeleteDC)、 畫線函數(shù)(如LineTo象对、Polyline黑忱、Arc)、填充畫圖函數(shù)(如Ellipse勒魔、FillRect甫煞、Pie)、畫圖屬性函數(shù)(如SetBkColor冠绢、SetBkMode抚吠、SetTextColor)、文本弟胀、字體函數(shù)(如TextOut楷力、GetFontData)、位圖函數(shù)(如SetPixel孵户、BitBlt萧朝、StretchBlt)、坐標(biāo)函數(shù)(如DPtoLP夏哭、LPtoDP检柬、ScreenToClient、ClientToScreen)竖配、映射函數(shù)(如SetMapMode何址、SetWindowExtEx酱固、SetViewportExtEx)、元文件函數(shù)(如PlayMetaFile头朱、SetWinMetaFileBits)、區(qū)域函數(shù)(如FillRgn龄减、FrameRgn项钮、InvertRgn)、路徑函數(shù)(如BeginPath希停、EndPath烁巫、StrokeAndFillPath)、裁剪函數(shù)(如SelectClipRgn宠能、SelectClipPath)等
設(shè)備上下文
設(shè)備描述表(Device Context, 縮寫為DC)也稱設(shè)備上下文或設(shè)備環(huán)境亚隙。簡單來說,就是一種包含各種繪圖屬性(字體违崇,顏色)和方法(繪圖函數(shù))的數(shù)據(jù)結(jié)構(gòu)阿弃。設(shè)備描述表定義了設(shè)備,繪圖工具和畫圖信息羞延,其不僅可以繪制各種圖形渣淳,還可以確定在應(yīng)用窗口中繪制圖形的方式和圖形的樣式。
Windows所有的繪制操作及圖形輸出都必須通過設(shè)備描述表這個(gè)虛擬用戶工作區(qū)來進(jìn)行伴箩。用戶在繪制之前入愧,必須獲取繪制窗口區(qū)域的一個(gè)設(shè)備環(huán)境DC,接著才能進(jìn)行GDI函數(shù)的調(diào)用嗤谚,執(zhí)行適合與設(shè)備環(huán)境的命令棺蛛。
獲取設(shè)備上下文的方法
- GetDC
CDC * GetDC();
該函數(shù)用于獲取窗口工作區(qū)的顯示器設(shè)備描述表,其不帶任何參數(shù)巩步。如果函數(shù)條用成功旁赊,則返回標(biāo)識CWnd客戶區(qū)的設(shè)備環(huán)境,否則返回NULL渗钉。
說明:在完成繪圖之后彤恶,用GetDC函數(shù)獲取的設(shè)備描述表必須通過ReleaseDC函數(shù)來釋放。
- BeginPaint
CDC * BeginPaiint(LPPAINTSTRUCT lpPaint);
Windows應(yīng)用程序響應(yīng)WM_PAINT消息進(jìn)行圖形刷新時(shí)鳄橘,會通過調(diào)用BeginPaint()函數(shù)來獲取DC声离。
FindWindowEx
HWND FindWindowExA(
[in, optional] HWND hWndParent,
[in, optional] HWND hWndChildAfter,
[in, optional] LPCSTR lpszClass,
[in, optional] LPCSTR lpszWindow
);
檢索類名稱和窗口名稱與指定字符串匹配的窗口的句柄。該函數(shù)搜索子窗口瘫怜,從指定子窗口后面的那個(gè)開始术徊。此函數(shù)不執(zhí)行區(qū)分大小寫的搜索。
-
hWndParent
要搜索其子窗口的父窗口的句柄鲸湃。即指定搜索某個(gè)窗口(hWndParent
)下的子窗口鏈表赠涮。 -
hWndChildAfter
子窗口的句柄子寓。當(dāng)父窗口的子窗口鏈表中有多個(gè)子窗口時(shí),比如有10個(gè)直系子窗口笋除,分別為child1
~child10
斜友,當(dāng)hWndChildAfter
指定為child4
時(shí),該函數(shù)的搜索會從child5
開始搜索垃它。
GetWindow
HWND GetWindow(
[in] HWND hWnd,
[in] UINT uCmd
);
返回與指定窗口有特定關(guān)系(如Z序或所有者)的窗口句柄鲜屏。
參數(shù):
hWnd:窗口句柄。要獲得的窗口句柄是依據(jù)nCmd參數(shù)值相對于這個(gè)窗口的句柄国拇。
nCmd:說明指定窗口與要獲得句柄的窗口之間的關(guān)系洛史。
OpenProcess
HANDLE OpenProcess(
[in] DWORD dwDesiredAccess,
[in] BOOL bInheritHandle,
[in] DWORD dwProcessId
);
打開一個(gè)已存在的進(jìn)程對象,并返回進(jìn)程的句柄酱吝。
-
dwDesiredAccess
想擁有的該進(jìn)程訪問權(quán)限 -
bInheritHandle
表示所得到的進(jìn)程句柄是否可以被繼承 -
dwProcessId
被打開進(jìn)程的PID