VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条

文章介绍了如何利用MFC的CWindowDC类进行画线操作,以及如何改变线条颜色。CWindowDC对象可以方便地访问窗口的客户区和非客户区进行绘图。通过构造CWindowDC对象的不同方式,可以在视类窗口、父窗口乃至桌面窗口上画线。要绘制不同颜色的线条,需要创建CPen对象并将其选入设备描述表。
摘要由CSDN通过智能技术生成

利用MFC的CWindowDC类实现画线功能
先介绍一个MFC类:CWindowDC,这个类也派生于CDC类,并且在构造时调用GetWindowDC函数获得相应的设备描述表对象,在析构时调用ReleaseDC函数释放该设备描述对象所占用的资源。也就是说,当我们利用CWindowDC对象绘图时,也不需要显式地调用GetDC和ReleaseDC函数,该对象会自动获取和释放设备描述表资源。使用CWindowDC对象有哪些好处呢?该对象可以访问整个窗口区域,包括框架窗口的非客户区和客户区。该对象的构造与CClientDC对象相同,如果要构造一个与视类窗口相关的设备描述表,则可以利用视类对象的指针来构造这个CWindowDC对象。如下所示是利用CWindowDC对象实现画线功能的代码。

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
	CWindowDC dc(this);
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);
 
	CView::OnLButtonUp(nFlags, point);
}

编译并运行Draw程序,将会发现这段代码实现的功能与利用CClientDC类画线时没什么区别,也只能在视类窗口中画线,因为这时创建的设备描述表与视类窗口相关。

接着,把上面代码中构造设备描述表对象时使用的参数this指针换为指向视类父窗口的指针

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
	CWindowDC dc(GetParent());
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);
 
	CView::OnLButtonUp(nFlags, point);
}

编译并运行Draw程序,将会发现此时线条可以画到工具栏和菜单栏上,程序运行结果下如图所示。

在桌面窗口中画线

如果获得了一个与桌面窗口相关的设备描述表,就可以在桌面窗口中绘图。CWnd类的 GetDesktopWindow 成员函数可以获得 Windows 桌面窗口的句柄。修改构造设备描述表的代码,结果如下所示。

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
	CWindowDC dc(GetDesktopWindow());
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);
 
	CView::OnLButtonUp(nFlags, point);
}

再次 Build 并运行 Draw 程序,并拖动鼠标画线,发现这时可以在整个屏幕窗口上画线。(但是截图后不显示)

绘制彩色线条
上述各种方法实现的画线功能所绘制的都是黑色线条。这是因为在设备描述表中有一个默认的黑色画笔,因此绘制的线条都是黑色的。如果想要绘制其他颜色的线条,首先需要创建一个特定颜色的画笔,然后将此画笔选入设备描述表中,接下来绘制的线条的颜色就由这个新画笔的颜色决定了。可以利用MFC提供的类CPen来创建画笔对象。该类封装了与画笔相关的操作,它有三个构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值