GetDC、GetDCEx、GetWindowDC

GetDC緩存

 

該函數爲指定窗口的客戶區域取回顯示DC的句柄。隨後的GDI函數中能夠使用顯示DC在窗口客戶區域繪圖。
原型:
HDC  GetDCHWND  hWnd);
參數:
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

返回於窗口矩形而不是客戶端矩形對應的DCip

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_WINDOWDCX_CACHEDCX_CLIPCHILDRENDCX_CLIPSIBLINGS, DCX_EXCLUDERGNDCX_INTERSECTRGNDCX_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,應用程序的繪圖請求將會產生不良影響。
相關文章
相關標籤/搜索