這裡只簡單建立幾個要點,有時間再補完整一點。
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.
特殊目的之 DC 類別
CPaintDC Class
It performs a CWnd::BeginPaint at construction time and CWnd::EndPaint at destruction time.
PS. 以上 note 參考 "Windows 程式設計使用 MFC" 中文版
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" 中文版
留言