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

本文介绍了MFC中CDC类的基本使用方法,并通过实例演示了如何利用不同类型的CDC子类(如CClientDC、CWindowDC和CPaintDC)进行画线操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         在上一篇,我们已经实现了简单的画线功能,不过我们是用平台SDK的实现的,其实MFC将所有与作图相关的操作封装成了一个类,即CDC。

我们现在来用CDC实现画线。代码如下:

CDC *pDC=GetDC();
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
这里的GetDC我们用的是CWnd的成员函数,它的返回值是一个CDC指针。

ReleaseDC也是CWnd的成员函数,它的参数也是一个CDC指针。


     在CDC中又有四个派生类,分别为:CClientDC、CWindowDC、CPaintDC和CMetaFileDC。

     那我们现在来简单地介绍一下他们,并且用CClientDC、CWindowDC和CPaintDC来实现画线功能。

1、 CClientDC(客户区设备上下文): 处理显示器描述表的相关的窗体客户区域。 

      用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中调用GetDC,析构函数中调用ReleaseDC。 

     所以用它来实现画线,代码如下:

    

CClientDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
CClientDC的构造函数的参数是CWnd的一个指针,这里我们可以用this指针。

2、CWindowDC:可以访问整个屏幕区域,包括客户区和菲客户区,同样其构造函数中调用GetDC,析构函数中调用ReleaseDC。 

所以用它来实现画线,代码如下:

CWindowDC  dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
3、CPaintDC: 封装BeginPaint和EndPaint两个API的调用。 
(1)用于响应窗口重绘消息(WM_PAINT)是的绘图输出。 
(2)CPaintDC 在构造函数中调用BeginPaint()取得设备上下文,在析构函数中调用EndPaint()释放设备上下文。EndPaint()除了释放设备上下文外,还负责从消息队列中清除WM_PAINT消息。因此,在处理窗口重画时,必须使用CPaintDC,否则WM_PAINT消息无法从消息队列中清除,将引起不断的窗口重画。 
(3)CPaintDC也只能用在WM_PAINT消息处理之中。

所以用它来实现画线,代码如下:

CPaintDC dc(this);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);


4、CMetaFileDC:与元文件相关的设备描述表关联。

     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值