Windows提供了幾種取得設備內容句柄的方法。
如果在處理一個消息時取得了設備內容句柄,應該在退出窗口函數之前釋放它(或者刪除它)。一旦釋放了句柄,它就不再有效了。對于打印機設備內容句柄,規則就沒有這么嚴格。
最常用的取得并釋放設備內容句柄的方法是,在處理WM_PAINT消息時,使用BeginPaint和EndPaint呼叫:
hdc = BeginPaint (hwnd, &ps) ;
其它行程序
EndPaint (hwnd, &ps) ;
變量ps是型態為PAINTSTRUCT的結構,該結構的hdc字段是BeginPaint傳回的設備內容句柄。 PAINTSTRUCT結構又包含一個名為rcPaint的RECT(矩形)結構,rcPaint定義一個包圍窗口顯示區域無效范圍的矩形。使用從BeginPaint獲得的設備內容句柄,只能在這個區域內繪圖。BeginPaint呼叫使該區域有效。
Windows程序還可以在處理非WM_PAINT消息時取得設備內容句柄:
hdc = GetDC (hwnd) ;
其它行程序
ReleaseDC (hwnd, hdc) ;
這個設備內容適用于窗口句柄為hwnd的顯示區域。這些呼叫與BeginPaint和EndPaint的組合之間的基本區別是,利用從GetDC傳回的句柄可以在整個顯示區域上繪圖。當然, GetDC和ReleaseDC不使顯示區域中任何可能的無效區域變成有效。
Windows程序還可以取得適用于整個窗口(而不僅限于窗口的顯示區域)的設備內容句柄:
hdc = GetWindowDC (hwnd) ;
其它行程序
ReleaseDC (hwnd, hdc) ;
這個設備內容除了顯示區域之外,還包括窗口的標題列、菜單、滾動條和框架(frame)。GetWindowDC函數很少使用,如果想嘗試用一用它,則必須攔截處理WM_NCPAINT消息,Windows使用該消息在窗口的非顯示區域上繪圖。