CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识
生活随笔
收集整理的這篇文章主要介紹了
CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
From: http://blog.csdn.net/zhangxinrun/article/details/5829084
(1)在Windows中,顯示工作是基于設備環境的。所謂設備環境(DC)是一種Windows數據結構,該結構包含應用程序設備輸
出時所需要的信息。
(2)在使用任何繪圖函數之前必須建立一個設備環境對象。
(3)在Visual C++ 6.0的MFC中提供了設備環境類CDC,它封裝了繪圖所需要的所有函數,其中包括了大多數的Windows API中
的GDI函數。
二、幾個設備環境類主要特點
1. CDC類
??CDC類是CObject類的派生類,也是所有設備環境類的基類。CDC類定義了一個設備描述對象,并提供了對設備描述對象進行
操作的成員函數以及對與窗口客戶區有關的顯示區進行操作的成員函數。
CDC類提供的成員函數可以用于操作設備描述對象、使用繪圖工具、選擇圖形設備界面,以及操作顏色和調色板,還用于取
得和設置繪圖屬性、映射方式、視圖和窗口范圍的操作、坐標的轉換、區域的使用、剪取、畫線以及繪制圖形和文字等操作。
2. CPaintDC類
??CPaintDC類是CDC類的一個派生類,該類一般用在響應WM_PAINT消息的函數OnPaint()中。
??WM_PAINT消息是當窗口的某個區域需要重畫時激發的窗口消息。當程序中的消息循環接到WM_PAINT消息時就自動調用消息處
理函數OnPaint(),如果在OnPaint函數內定義了CPaintDC類的對象,通過這個類對象就可以使用CDC類的成員函數完成視圖客
戶區中的圖形繪制操作。
3. CClientDC類
??CClientDC類也是CDC類的派生類。它只能在窗口的客戶區(即窗口中除了邊框、標題欄、菜單欄以及狀態欄外的中間部分)
中進行繪圖,坐標點(0,0)通常指的是客戶區的左上角。它的構造函數調用GegDC函數,而析構函數調用ReleaseDC函數。
4. CWindowDC類
??CWindowDC類也是CDC類的派生類。其成員函數可以在窗口的客戶區和非客戶區(即窗口的邊框、標題欄、菜單欄以及狀態
欄)中繪圖,坐標點(0,0)是指整個屏幕的左上角。同CClientDC類一樣,它的構造函數調用GegDC函數,而析構函數調用
ReleaseDC函數。
5. CMdtaFileDC類
??CMetaFileDC類提供了一個面向Windows圖元文件的設備環境,封裝了在一個Windows圖元文件中繪圖的方法。圖元文件是一
個與設備無關的圖片的集合,由于它對圖像的保存比像素更精確,因而往往在要求較高的場合下使用,例如AutoCAD的圖形保
存等。
三、幾個設備環境類的主要差別
常用設備環境類有CPaintDC、CClientDC、CWindowDC和CMetaFileDC類
1. CWindowDC類與CPaintDC 、CClientDC類的區別
其區別主要有以下兩個方面:
(1)用CPaintDC 和CClientDC類的對象繪制圖形時,繪制區只能在客戶區,而不能在非客戶區;而CwindowDC類既可以在窗口
的客戶區也可以在非客戶區進行圖形繪制。
(2)在CWindowDC繪圖類下,坐標系是建立在整個屏幕上的,在像素坐標方式下,坐標原點在屏幕的左上角;而在CPaintDC和
CClientDC繪圖類下,坐標系是建立在客戶區上的,在像素坐標方式下,坐標原點在客戶區的左上角。
2. CPaintDC類與CClientDC類的區別
CPaintDC類的對象應用在OnPaint函數中,以響應Windows的WM_PAINT消息;而CClientDC類的對象應用在非響應消息WM_PAINT
的情況下。
CPaintDC類響應WM_PAINT消息,并自動完成繪制,這對維護圖形的完整性有著重要的作用。CClientDC類可以實時地將圖形繪
制到屏幕上,不需要重畫;而如果用CPaintDC類的對象完成同樣的工作,只能發出消息讓屏幕上包含這條直線的區域重畫,以
把這條直線繪制到屏幕上。
四、幾個設備環境類的使用方法
1. CDC類
因為CDC類不能用窗口對象指針初始化對象,所以,一般不直接定義對象。
2. CPaintDC類
CPaintDC 類一般用在窗口類OnPaint函數中,可采用如下代碼定義一個CPaintDC類對象:
CPaintDC dc(this);
以上代碼定義了一個CPaintDC類的對象dc,并用當前的窗口對象指針this對對象進行了初始化。CClientDC和CWindowDC類也采
用這樣的方法。
3. CClientDC類
可利用以下代碼定義一個對象:CClientDC dc(this);
4. CWindowDC 類
利用以下代碼創建一個CWindowDC類的對象:CWindowDC dc(this);
五、繪圖設備類
1.GDI的概念
Windows為設備環境提供了各種各樣的繪圖工具,如【畫筆】、【畫刷】以及【字體】等。在MFC中封裝了這些工具,這些類稱
為GDI類,它們有一個共同的抽象基類CGdiObject,可以將這些繪圖設備類創建的對象選入到設備環境中,完成有關的操作。
2.常用的繪圖設備類
在MFC中主要的繪圖設備類有:CGdiObject、CPen、CBrush、CFont、CBitmap、CRgn和CPalette等。
(1)CGdiObject類
CGdiObject類派生于CObject類,它是CGdiObject、CPen、CBrush、Cfont和CBitmap等的基類。用戶不能直接生成一個
CGdiObject類,而必須在它的某種設備繼承類中生成一個CGdiObject類的派生類。
(2)CPen類
CPen類是CGdiObject類的一個派生類,它封裝了Windows圖形設備接口(GDI)中有關畫筆的操作。
(3)CBrush類
(4)Cfont類
(5)CBitmap類
3.常用的繪圖設備類對象的創建和將其引入到設備環境中的方法
在選擇繪圖設備類對象(GDI對象)進行繪圖時,一般可按下列步驟進行:
(1)定義一個GDI對象,然后調用相應的函數(如CreatePen、CreateSolidBrush等)創建此GDI對象。
(2)將已構造出的GDI對象利用設備環境類對象的成員函數SelectObject選入到當前環境中,并同時將原來的GDI對象保存起
來。
(3)繪圖結束后,恢復當前設備環境中原來的GDI對象。
注意:在Windows系統中包含了一些庫存的GDI對象,在第(3)步中可直接利用設備環境類(CDC)的成員函數
SelectStockObject將一個Windows庫存的GDI對象選入,系統可自動將原來選入的GDI對象從設備環境中分離出來。
以下擴展內容自行搜索
六、Windows下的坐標映像方式和特點以及如何設置坐標映像方式。
七、幾種常見的Windows的坐標映像方式下的坐標轉換方法。
八、幾種常見的基本圖形元素如點、直線、矩形和文字等的繪制方式。
總結
以上是生活随笔為你收集整理的CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Android应用开发攻略》——2.1
- 下一篇: python验证软件签名