MFC绘图

Windows使用一个称为设备环境(Device Context)的对象的方法——但该对象并没有创建一个C++类,因为Windows早于并存在于C++之外。设备环境对象用一些默认值创建,可以用它们创建默认的设备环境。应用Windows绘制一直线,所需的是一个i额设备环境对象的指针和直线坐标,设备环境对象的指针叫做设备环境句柄(HDC)。

::MoveTo(HDC hdc, int x, int y);
::LineTo(HDC hdc, int x, int y);

要绘制一个完整的形状,::MoveTo()函数只被调用一次。然后,::LineTo()函数被调用。

因为设备环境在内存中创建,而内存经常受到扰动,它的地址可能是经常变化的。因此,一个设备环境句柄不是直接指向设备环境,而是指向另外一个跟踪设备环境地址的指针。

  • 在MFC中创建一个设备环境

MFC用CDC类封装了一个设备环境对象,CDC的成员变量m_hdc指向它所拥有的设备环境,用户可以创建四种类型的设备环境:

屏幕

打印机

只有打印机的信息部分

位图

创建一个屏幕设备环境,可以用:

CDC* pDC = GetDC();

这里GetDC()是CWnd类的成员函数,它反悔一个允许用户绘制它的窗口客户区的设备环境;如果还希望绘制非客户区,则使用:

CDC* pDC = GetWindowDC();
如果需要绘制整个屏幕,如编写一个屏幕保护程序或游戏程序,可能需要对整屏进行绘制,这时使用:

CDC* pDC = CDC::FromHandle(::GetDC(NULL));

 屏幕设备环境来自三种资源之一:私有设备环境、类设备环境和通用设备环境。

1. 私有设备环境
创建窗口时,私有设备环境便创建了,并在窗口存在期间一直存在。要使窗口创建一个
私有设备环境,必须在目标窗口的窗口类中设置C S _ O W N D C标志,这时GetDC( )返回一个私
有设备环境的指针,而不创建一个设备环境。在窗口存在期间,为私有设备环境所作的任何
变化都被保存。私有设备环境主要在以图形为中心的应用程序中使用,在那里经常地分配一
个设备环境,这样会占用非常多的C P U时间。

2. 类设备环境
类设备环境在注册一个窗口类时创建,并在窗口类的存在期间一直存在。要使窗口类创
建它自己的类设备环境,必须设置C S _ C L A S S D C标志,GetDC( )只返回指向该类设备环境的
指针。此外,在窗口类的存在期间,设备环境一直保留它的值。必
须注意不要让两个由相同的窗口类创建的窗口在同一时间绘图。

3. 通用设备环境
在一个通用资源堆中使用GetDC( )时,一个通用设备环境便创建了。要获得一个通用设
备环境,不要在窗口类中设置C S _ O W N D C或C S _ C L A S S D C。对于更早版本的Wi n d o w s,操作
系统本身只有五个预分配的通用设备环境,因此取名G e t D C ( )与CreateDC( )相对应。

必须保证在用完设备环境后释放它,在使用一个通用设备环境后,需要使用下面语句:

ReleaseDC(pDC);

注意:私有设备环境和类设备环境不必释放。

用户最有可能用通用设备环境来做绘图工作。每次释放一个通用设备环境时,为它们设置的值都被丢失。但是,可以用下面两个CDC成员函数保存和恢复一个设备环境的设置值:

SaveDC()保存设备环境的当前状态;

RestoreDC()将设备环境恢复到用SaveDC()保存的状态。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值