GetDC緩存
該函數爲指定窗口的客戶區域取回顯示DC的句柄。隨後的GDI函數中能夠使用顯示DC在窗口客戶區域繪圖。
原型:
參數:
hWnd:將要取回DC的窗口句柄。若是該值爲NULL,GetDC取回整個屏幕的DC。
返回值:
成功,得到指定窗口客戶區域的DC句柄;失敗返回NULL。調用GetLastError獲取擴展錯誤信息。
備註:
根據爲指定窗口指定的類類型來決定取回一個公共、類或私有DC(a common, class, or private device context )。
每次取回公共DC時,GetDC函數給它賦值默認屬性。
取回類或私有DC時,GetDC函數保持以前賦值的屬性不變。
在使用公共DC繪圖後,必須調用
ReleaseDC來釋放DC。
類和私有DC沒必要釋放。
可用內存數決定DC的數量。
GetDCEx
該函數爲指定窗口的客戶區域或整個屏幕取回顯示DC的句柄。隨後的GDI函數中能夠該句柄在窗口客戶區域繪圖。
GetDCEx 是GetDC的擴展,對如何剪裁客戶區域或是否剪裁客戶區域提供給程序更多的控制。
原型: 函數
HDC
GetDCEx(
HWND
hWnd,
HRGN
hrgnClip,
DWORD
flags);
參數:
hWnd:將要取回DC的窗口句柄。若是該值爲NULL,GetDCEx取回整個屏幕的DC。
hrgnClip:指定可能和DC的可見區域合併的剪切區域。
flags:指定DC的建立方式。可能爲下表中的值的組合:
值spa |
描述設計 |
DCX_WINDOWorm |
返回於窗口矩形而不是客戶端矩形對應的DC。ip |
DCX_CACHE 內存 |
從緩存中取回DC,而不是OWNDC 或 CLASSDC 窗口。實際上重寫了CS_OWNDC 和CS_CLASSDC 了。ci |
DCX_PARENTCLIP 原型 |
使用父窗口的可見區域。取消父窗口的WS_CLIPCHILDREN 和 CS_PARENTDC 標誌位。DC的起始座標設置爲由hWnd標識的窗口的左上角。同步 |
DCX_CLIPSIBLINGS |
排除由hWnd標識的窗口的全部同級窗口的可見區域。 |
DCX_CLIPCHILDREN |
排除由hWnd標識的窗口的全部子窗口的可見區域。 |
DCX_NORESETATTRS |
當該DC釋放時,不用設置該DC的屬性爲默認值。 |
DCX_EXCLUDERGN |
從返回的DC的可見區域裏去除hrgnClip標識的剪切區域。 |
DCX_EXCLUDEUPDATE |
返回一個區域,該區域去除了窗口更新的區域。 |
DCX_INTERSECTRGN |
hrgnClip表示的剪切區域和返回DC的可見區域取交集。 |
DCX_INTERSECTUPDATE |
返回一個區域,該區域包含窗口更新的區域。 |
DCX_VALIDATE |
當指定DCX_INTERSECTUPDATE,引發DC徹底有效(causes the device context to be completely validated.)。 在該函數中使用DCX_INTERSECTUPDATE 和DCX_VALIDATE 等價於使用BeginPaint函數。 |
返回值:
成功,返回指定窗口DC句柄。失敗返回NULL。若是傳入的hWnd爲無效值,返回失敗。調用GetLastError獲取擴展錯誤信息。
備註:
flags支持這些值:
DCX_WINDOW,
DCX_CACHE,
DCX_CLIPCHILDREN,
DCX_CLIPSIBLINGS,
DCX_EXCLUDERGN,
DCX_INTERSECTRGN,
DCX_EXCLUDEUPDATE 和
DCX_INTERSECTUPDATE。
和GetDC返回的DC不一樣,GetDCEx返回的DC不會和相關窗口保持同步。
若是窗口移動或改變大小,可能會產生異常錯誤。若是程序獲取DC、繪圖而後再釋放DC,錯誤的機會將會減小。
除非顯示DC屬於窗口類,不然在繪圖後必須調用
ReleaseDC來釋放DC。
由於一次只能有5個公共DC可用,若是釋放DC失敗,將可能致使其餘程序訪問DC失敗。
若是
CS_CLASSDC, CS_OWNDC 或
CS_PARENTDC被指定爲WNDCLASS結構中的一個類型,當該窗口類被註冊時,函數將返回屬於窗口類的DC。
GetWindowDC
函數取回整個窗口DC,包括標題欄、菜單和滾動欄。
原型:
HDC
GetWindowDC(
HWND
hWnd);
參數:
hWnd:要取回DC的窗口句柄。若是該值爲NULL,取回整個屏幕的DC。
返回值:
成功,返回指定窗口DC的句柄。NULL表示失敗或傳入的hWnd爲無效參數。調用GetLastError獲取擴展錯誤信息。
備註:
GetWindowDC專爲在窗口非客戶區域繪圖而設計。不推薦在任何窗口的非客戶區域繪圖。
使用
GetSystemMetrics函數獲取象標題欄、菜單和滾動欄等非客戶區域的尺寸大小。
GetDC用來取回整個
屏幕的DC。
在繪圖完成後,必須調用ReleaseDC來釋放DC。若是不釋放窗口DC,應用程序的繪圖請求將會產生不良影響。