1 CPaintDC類
(1)CPaintDC類是CDC類的一個派生類,該類一般用在響應WM_PAINT消息的函數OnPaint()中。
(2)WM_PAINT消息是當窗口的某個區域需要重畫時激發的窗口消息。當程序中的消息循環接到WM_PAINT消息時就自動調用消息處理函數OnPaint(),如果在OnPaint函數內定義了CPaintDC類的對象,通過這個類對象就可以使用CDC類的成員函數完成視圖客戶區中的圖形繪制操作。 (3)CPaintDC用於響應窗口重繪消息(WM_PAINT)時的繪圖輸出。CPaintDC在構造函數中調用BeginPaint()取得設備上下文,在析構函數中調用EndPaint()釋放設備上下文。EndPaint()除了釋放設備上下文外,還負責從消息隊列中清除WM_PAINT消息。因此,在處理窗口重畫時,必須使用CPaintDC,否則WM_PAINT消息無法從消息隊列中清除,將引起不斷的窗口重畫。CPaintDC也只能用在WM_PAINT消息處理之中。
2 CClientDC類
CClientDC類也是CDC類的派生類。它只能在窗口的客戶區(即窗口中除了邊框、標題欄、菜單欄以及狀態欄外的中間部分)中進行繪圖,坐標點(0,0)通常指的是客戶區的左上角。它的構造函數調用GegDC函數,而析構函數調用ReleaseDC函數。CClientDC(客戶區設備上下文)用於客戶區的輸出,它在構造函數中封裝了GetDC(),在析構函數中封裝了ReleaseDC()函數。一般在響應非窗口重畫消息(如鍵盤輸入時繪制文本、鼠標繪圖)繪圖時要用到它。用法是:CClientDC dc(this);//this一般指向本窗口或當前活動視圖dc.TextOut(10,10,str,str.GetLength());//利用dc輸出文本,如果是在CScrollView中使用,還要注意調用OnPrepareDC(&dc)調整設備上下文的坐標。