跳到主要內容

在視窗中繪圖

這裡只簡單建立幾個要點,有時間再補完整一點。

Windows 中負責圖形輸出的部份為圖形裝置介面(Graphic Device Interface, GDI),GDI 使用簡單
的機制來確保每個在視窗中執行的程式都根據此規則運作。而這個機制就是 DC(Device Context)。
DC 是一種 Windows 的資料結構,它含有一個描述所有 GDI 需要知道有關顯示平面資的欄位,而該
顯示平面則關聯到實際的輸出裝置,在螢幕上畫出任何東西之前,Windows 程式必須透過 GDI 來取
得 DC 的 handle。
DC 讓 GDI 能夠成為一個「與裝置無關」的工具,只要給予程式一個 DC,GDI 函式就可以在各種不
同的輸出裝置中繪圖。

CWnd::GetDC 它會傳回一個指向 Windows DC 的 CDC 物件指標,由 CWnd::GetDC 產生的 DC 必須在
繪圖完成後由 CWnd::ReleaseDC 來釋放;在 OnPaint 處理函式中,就必須用 CWnd::BeginPaint
CWnd::EndPaint 來取 GetDC 及 ReleaseDC,以確保對 WM_PAINT 做出適當的處理。

ex.
CDC *pDC = GetDC();
// do something
ReleaseDC(pDC);
PAINTSTRUCT ps;
CDC *pDC = BeginPaint(&ps);
// do something
EndPaint(&ps);



特殊目的之 DC 類別
類別名稱 內容描述
CPaintDC 可在視窗中的client area繪圖(僅用在 OnPaint 訊息處理函式中)
CClientDC 可在視窗中 client area 繪圖(可用在除了 OnPaint 外的任何地方)
CWindowDC 可在視窗中的任何地方(包含 non-client area)繪圖
CMetaFileDC 可在 GDI metafile 中繪圖


CPaintDC Class
It performs a CWnd::BeginPaint at construction time and CWnd::EndPaint at destruction time.



PS. 以上 note 參考 "Windows 程式設計使用 MFC" 中文版

留言