关闭

MFC绘图类(CDC,CPaintDC,CClientDC,CWindowDC)简介

515人阅读 评论(0) 收藏 举报

MFC的类CDC,CPaintDC,CClientDC,CWindowDC都可以用于绘图,我们在进行绘图时对怎么使用这几个类常常混淆。

其中CDC类是基础,另外的几个类是为了特殊应用从CDC类派生出来的,下面对这几个类进行简单的介绍。

(1)CDC类

CDC是CObject类的一个派生类,CDC类是所有绘图类的基类,CDC类定义了一个设备描述对象。CDC类提供了对这个设备描述对象进行操作的成员函数,还有

也对窗口客户区有关的显示区进行操作的成员函数进行了支持,通过CDC类以及其派生类创建的对象,可以利用CDC类的所有成员函数来完成图形的绘制工作。CDC

类提供的成员函数可以用于对设备描述对象进行的操作,绘图工具的使用,图形设备界面以及颜色和调色板的操作,其成员函数还可以取得和设置绘图属性,映像方式

,视口以及窗口范围的操作,坐标转换,区域使用,裁剪,绘图以及显示文字等。

CDC类包含了与图形绘制的相关的大部分操作,为了适应Windows编程的具体需要,又派生出了下面几个派生类。

(2)CPaintDC类

CPaintDC是CDC类的一个派生类,他用于模拟响应Windows消息WM_Paint的设备环境,在这个类中可以使用CDC中的所有成员函数。CPaintDC类一般用在函数

OnPaint()中,响应WM_Paint消息,WM_Paint是窗口的的某个区域需要进行重画是所激发的窗口消息,一个用CPaintDC类创建的对象是按下面的机制调用的:Windos的

的消息循环机制一直都在采集各种消息,当接到WM_Paint消息时,就自动调用消息处理函数OnPaint,在OnPaint函数中创建CPaintDC类对象,通过这个类对象使用CDC类

的成员函数,完成视图客户区中的图形绘制操作。

(3)CClientDC类

CClientDC类也是CDC类的一个派生类,它为非响应Windows消息WM_Paint的成员函数提供了一个设备环境。

(4)CWindowDC类

CWindowDC类也是CDC类的一个派生类,它提供了一个设备环境以便成员函数在包括非客户区在内的真个屏幕区域内绘图。

(5)几个类的主要区别

CWindowDCk类与CPaintDC,CClientDC区别的一个方面是:CPaintDC和CClientDC的类的对象绘制图形时,绘制区只可以是客户区,不能在非客户区,但是CWindowDC可以在非客户区进行绘制。

CWindowDCk类与CPaintDC,CClientDC区别的一个方面是:在CWindowDC下,坐标系是建立在整个屏幕上的,在像素坐标的方式下,坐标原点在屏幕的左上角,但是CPaintDC以及CClientDC坐标系是建立在客户区上的,在像素坐标的方式下,坐标原点在客户区的左上角。

CPaintDC和CClientDC都是在窗口的客户区内绘制图形,但是二者的在绘制机制上有着本质的区别。CPaintDC类对象应用在OnPaint函数中,相应WM_PAINTt消息,但是CClientDC是应用在非响应消息WM_PAINT的情况下的。

(6)使用方法

6.1 CDC类

因为CDC类不能用窗口对象指针初始化对象,所以一般不直接创建对象,但经常用来建立一个内存设备描述对象,创建方法如下

CDC dc;

6.2CPaintDC类

CPaintDC类一般用在窗口类的OnPaint函数中,可以采用如下的代码创建一个CPaintDC类对象

CPaintDC dc(this);

以上的代码创建一个CPaintDC类对象dc,并用当前的窗口对象指针this对对象进行了初始化。

CClientDC和CWindowDC也采用这样的使用方法

6.3CClientDC类

以下代码创建一个CClientDC对象

CClientDC dc(this);

以上的代码创建一个CClientDC类对象dc,并用当前的窗口对象指针this对对象进行了初始化。

6.4CWindowDC类

CWindowdc dc(this);

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

CPaintDC 、CWindowDC、 CClientDC、 CDC的区别与联系

CPaintDC 、CWindowDC、 CClientDC、 CDC 关系图: 一句话概括: CPaintDC            无效区dc,      相当于Be...
  • liuy_yy
  • liuy_yy
  • 2012-01-11 08:55
  • 7956

CPaintDC, CClientDC与CWindowDC的区别

当初为了区分 CPaintDC 和 CClientDC,搜到了这篇文章,转它一下。-----------------------------------------------------------...
  • heli200482128
  • heli200482128
  • 2016-05-20 16:37
  • 745

CPaintDC, CClientDC与CWindowDC的区别

技术问答:CPaintDC, CClientDC与CWindowDC的区别问:CPaintDC是一种怎样的DC?就像CClientDC是客户区的,它是干什么的?还有msdn上说当有更新窗口或者重绘窗口...
  • metasearch
  • metasearch
  • 2009-10-11 21:03
  • 636

windows程序设计(20):MFC绘图

先看程序: void CMainWindow::OnPaint () { //在OnPaint函数中,只能使用CPaintDC CPaintDC dc (this); CRect...
  • thefutureisour
  • thefutureisour
  • 2012-11-24 11:56
  • 2272

CPaintDC类与 CClientDC类的区别

CPaintDC 与 CClientDC   CPaintDC 与 CClientDC都是从CDC类继承而来。所以,这两个类的外在行为高度的抽象一致。以致于初者会误以为两者的使用可以替换(或者说MF...
  • gencheng
  • gencheng
  • 2013-12-16 15:43
  • 4526

Windows GDI绘图-入门篇

Windows则提供了一抽象的接口,称之为图形设备接口(GDI)。 Windows己经提供了各种显示卡及打印机的驱动程序, 这样我们的程序就可以不必关心与系统相连的显示卡及打印机的类型。 我们的程序可...
  • xdrt81y
  • xdrt81y
  • 2014-02-20 11:44
  • 10351

MFC实现画图工具中的画线功能(二)

在上一篇,我们已经实现了简单的画线功能,不过我们是用平台SDK的实现的,其实MFC将所有与作图相关的操作封装成了一个类,即CDC。 我们现在来用CDC实现画线。代码如下: CDC *pDC=GetD...
  • xh1282758029
  • xh1282758029
  • 2013-10-22 10:10
  • 1722

VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)

上一节中鸡啄米讲了文本输出的知识,本节的主要内容是CDC类及其屏幕绘图函数。        CDC类简介        CDC类是一个设备上下文类。   ...
  • my_lord_
  • my_lord_
  • 2016-09-01 16:09
  • 1110

MFC绘图知识大全

http://www.cppblog.com/bestcln/articles/83189.html
  • lxw907304340
  • lxw907304340
  • 2015-10-14 18:03
  • 2932

VC绘图中CPaintDC类和CRect类等涉及到的实际选中区域大小

VC绘图中CPaintDC类和CRect类等涉及到的实际选中区域大小作者: gadflycq     日期:2008-08-04 一、VC中在当前窗口中绘图涉及到的坐标系 二、CPaintDC类...
  • gadflycq
  • gadflycq
  • 2014-05-27 01:53
  • 427
    个人资料
    • 访问:180678次
    • 积分:3017
    • 等级:
    • 排名:第13503名
    • 原创:112篇
    • 转载:18篇
    • 译文:0篇
    • 评论:193条
    联系我
    博客专栏
    最新评论