首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

MFC 四種裝置內容(DC)類別完整對比與使用指南

     編輯:關於VC++

DC 類別體系

MFC 將 Win32 DC 封裝為四大類別,皆繼承自 CDC:

類別建構/取得方式釋放方式適用範圍特點
CClientDC建構時 GetDC()解構時 ReleaseDC()客戶區最常用,自動管理生命週期
CWindowDC建構時 GetWindowDC()解構時 ReleaseDC()整個視窗(含非客戶區)可繪製標題列、邊框、捲軸等
CPaintDCOnPaint 中建構解構時 EndPaint()客戶區回應 WM_PAINT 專用,含無效區資訊
CMetaFileDCCreate() / CreateEnhanced()Close() / CloseEnhanced()中繼檔建立 .wmf/.emf 向量圖檔

程式碼範例

// 1. CClientDC - 最常用
CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
// 自動 ReleaseDC

// 2. CWindowDC - 整個視窗
CWindowDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

// 3. 桌面 DC - 跨進程繪製
CWindowDC dc(CWnd::GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

// 4. 低層 SDK 風格(不推薦)
/*
HDC hdc = ::GetDC(m_hWnd);
::MoveToEx(hdc, m_ptOrigin.x, m_ptOrigin.y, nullptr);
::LineTo(hdc, point.x, point.y);
::ReleaseDC(m_hWnd, hdc);
*/

選擇建議

  • 一般視窗繪圖 → CClientDC
  • 需繪製非客戶區 → CWindowDC
  • OnPaint 處理器 → CPaintDC
  • 列印/匯出向量圖 → CMetaFileDC
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved