CDC類及其子類---CClientDC、CWindowDC和CPaintDC .


 

http://blog.csdn.net/ccfboy/archive/2009/05/02/4142943.aspx

  • CDC類

Windows使用與設備無關的圖形設備環境(DC :Device Context) 進行顯示 。MFC基礎類庫定義了設備環境對象類----CDC類。

 

父類:從 CObject 直接繼承而來。繼承了CObject類的各種特性,如動態創建等等。

 

例如用GDI畫矩形要Rectangle(hDC,...),而使用CDC則是dc.Rectangle(...),由此可見CDC主要是把原本需要HDC作為參數的GDI函數封裝了一下,HDC成了它的一個成員變量。   CPaintDC CWindowDC CClientDC:他們都是從CDC繼承,分別是對上面所說的BeginPaint,GetWindowDC, GetDC調用對進行封裝(CPaintDC構造時調用BeginPaint,析構時調用EndPaint,其余同理)。

 

數據成員只有兩個:HDC m_hDC : CDC對象使用的輸出設備上下文
                           HDC m_hAttribDC : CDC對象使用的屬性設備上下文

  • CClientDC子類
  1. CClientDC類只能在客戶區繪圖;
  2. 所謂客戶區指窗口區域中去掉邊框、標題欄、菜單欄、工具欄、狀態欄等之外的部分,它是用戶可以操作的區域;
  3. 在使用CClientDC進行繪圖時,一般要調用GetClientRect()函數來獲取客戶區域的大小;
  4. CClientDC類在構造函數中調用Windows API函數GetDC(),在析構時響應ReleaseDC();
  5. CClientDC類的窗口句柄保存在成員變量m_hWnd,為構造CClientDC,需將CWnd作為參數傳遞給構造函數。
  • CWindowDC子類
  1. CWindowDC對象在構造時調用Windows API函數GetWindowDC,在析構時調用相應的API函數ReleaseDC,這意味着CWindowDC對象可訪問CWnd所指向的為整個全屏幕區域;
  2. CWindowDC允許在顯示器的任意位置繪圖。坐標原點在整個窗口的左上角。
  3. 在使用CWindowDC進行繪圖時,一般要調用GetWindowRect函數來獲取整個應用程序窗口區域的大小;
  4. CWindowDC類的窗口句柄保存在成員變量m_hWnd,為構造CClientDC,需將CWnd作為參數傳遞給構造函數。
  • CPaintDC子類
  1. 通常CPaintDC用來響應WM_PAINT消息。一般應用在OnPaint函數. 
  2. CClientDC也是從CDC派生出來的.構造時自動調用GetDC函數,析構時自動調用ReleaseDC函數.一般應用於客戶區窗口的繪制.
  3. CPaintDC只能在WM_PAINT消息中使用, 用於有重畫消息發出時才使用的內存設備環境, 而CClientDC和客戶區相關,有重畫消息發出時才使用的內存設備環境, 可在任何地方使用.
  4. 在處理窗口重畫時,必須使用CPaintDC,否則WM_PAINT消息無法從消息隊列中清除,將引起不斷的窗口重畫。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com