第七章总结

  7.1设备描述表与CDC类
  MFC的CDC类对设备描述符表和GDI函数进行了全面的封装,使这两者的使用更加方便。
7.1.1设备描述表与GDI对象
1.设备描述符表也称为设备上下文,它是Windows应用程序与设备驱动程序和输出设备之间的接口。
Windows中的设备描述符表分为以下4种类型:
显示器型:支持显示器上的绘图操作。
打印机型:支持打印机和绘图仪上的绘图操作。
内存型:支持位图上的绘制操作。
信息型:支持设备数据的访问。
2.GDI对象
GDI是图形设备接口的缩写。GDI对象是绘图工具比如画刷画笔。
7.1.2CDC类
由于DC与屏幕绘图及文本显示操作密切相关,CDC类封装了相当多的函数,主要包括以下几类:
初始化函数:指定的设备创建设备描述符。
设备描述符表函数:如保存或恢复DC的状态。
绘图及其相关函数:如设置绘图前背景颜色,绘图工具选择,图形绘制等。
文本与字体函数:如文本输出字体信息的取得。
坐标与映射函数:比如设置映射方式,各种坐标的转换等。
7.1.3设备描述符表的申请和释放
在处理不同的消息时,应使用不同的ARI函数来申请不同类型的设备描述符表(同时其释放函数也不同)
1.       处理WM_PAINT消息
在处理WM_PAINT消息时,使用BeginPaint()API函数来取得设备描述符表的句柄和用EndPiant()API函数来释放设备描述符表。BeginPaint()的返回值中包含了窗口客户区无效范围的矩形,后续绘图函数只能在这一区域内绘图,并且BeginPaint()调用使这一区域有效。
一个提高程序效率的方法是在不需要时禁止WM_PAINT消息的发送。例如,滚动用户域时,用户域将成为无效域。Windows系统把WM_PAINT消息放入应用程序队列以更技术应在应用程序的非WM_PAINT代码部分使用,因为BeginPaint()会使无效域有效。
如果想迫使Windows系统发送一条WM_PAINT消息,InvalidateRect()和InvalidateRgn()用于一部分或全部用户域无效。单独使用这些函数都使应用程序队列中增加一条WM_PAINT消息。如果想马上得到一条WM_PAINT消息,可在上述函数后面加上一个UpdateWindows()函数。UpdateWindows()函数把WM_PAINT消息直接发给应用程序而不经过消息队列。
2.       处理非WM_PAINT消息
在处理非WM_PAINT消息时,应使用如下API函数取得或释放设备描述符表。
(1)            用GetDC()取得设备描述符表,并用ReleaseDC()释放设备描述符表。这种方式取得的设备描述符表为窗口客户区的设备描述符表。程序只能在窗口客户区内绘图。
(2)            用GetWindowDC()取得设备描述符表。并用ReleaseDC()释放设备描述符表。这种方式取得的设备描述符表为整个窗口的设备描述符表,包括客户区、标题栏、菜单、滚动条和框架。程序可在整个窗口内绘图。
(3)            用CreateDC()取得设备描述符表,并用DeleteDC()释放设备描述符表。这种方式可获得某个指定设备的设备描述符表,比如获得整个屏幕的设备描述符表,这样应用程序就可以在自己的窗口之外进行绘图。
7.1.4WM_PAINT消息的响应过程
AppWizard生成的框架程序中对WM_PAINT消息的响应函数为CView类的OnPaint()。OnPaint()函数的定义如下:
Void  CView::OnPaint()
{
       //standard  paint routine
       CPaintDC  dc (this);
       OnPrepareDC(&dc);
       OnDraw(&dc);
}
OnDraw()是虚函数,将调用在应用程序视图类中改写了的OnDraw(),AppWizard生成的这一OnDraw()代码如下:
Void  CKeyView::OnDraw(CDC* pDC)
{
       CKeyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
}
7.2基本图形绘制
CDC类封装了大量的绘图函数
7.2.1画点
SerPixel()函数用于画点,它有两个重载版本,这两个函数原形为:
COLORREF SetPixel(int  x , int  y, COLORREF crColor);
COLORREF SerPixel(POINT point, COLORREF  crColor);
参数x为点的横坐标,参数y为点的纵坐标,这两个参数也可以放在一个PONIT类型的变量中,POINT类型为VisualC++中定义的点结构,如下所示
Typedef  struct  tagPOINT
{
       LONG x;
       LONG  y;
}POINT;
参数crColor指定点的颜色。可以用RGB()宏指明颜色,此宏指令返回一个COLORREF值,这是Windows指明颜色的方式。RGB宏有3个参数,依次为红、绿、蓝的分量值,每个参数的取值范围为0~255.
SetPixel()函数的返回值是实际所画点的颜色,若操作失败,则返回1.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值