VC精华教程-MFC入门系列(六).docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC精华教程:MFC入门系列(六)   在大家的帮助之下,我的文章上了文章的排行榜,谢谢大家!   我们今天讲一下图形设备接口(以下简称GDI),一个技术或语言的产生都有它的背景和原因。GDI是Windows提供的一套函数和结构,以便于我们调用它们来绘图。为什么要提供这样一个接口呢?   因为我们有不同的输出设备,各种显示器,各种打印机,他们有不同的打印驱动程序,也就是说,我们要针对不同的设备编程,要调用不同的设备驱动程序吗?那么,我的显示器换了,是不是我们的程序就要更换呢?我们并没有这样的麻烦,为什么呢?GDI提供这样一个平台,屏蔽了他们的差异。感觉就像Windows操作系统屏蔽了硬件,Java虚拟机屏蔽平台一样。我们使用的GDI全部使用设备上下文(DC)作为显示设备的信息来源。因此,我们无需关心设备的特性。   在图形绘制当中,提供了一个叫做设备上下文(DC)的结构,是一个GDI提供的接口供我们来访问设备,所有的绘图都是通过设备上下文来进行。   因此,同一应用程序可以在配有不同的类型显示器的计算机上使用。应用程序不需要针对所有显示器进行更改。   为了后面的画图型准备,我们先添加一个菜单   五个菜单的资源ID分别为ID_DRAW_LINE和ID_DRAW_RECT,   ID_DRAW_ROUND_RECT和ID_DRAW_CIRCLE和ID_DRAW_CURVE。   添加好菜单,我们还要修改一下工具条,在OnCreateClient中,用下列代码修改原有的工具条代码   //工具条创建 UINTtool[]= {0,ID_DISPLAY_DOWN,ID_DISPLAY_UP,ID_DISPLAY_RIGHT, ID_DISPLAY_LEFT,0,ID_DRAW_LINE,ID_DRAW_RECT, ID_DRAW_ROUND_RECT,ID_DRAW_CIRCLE,ID_DRAW_CURVE}; //创建扩展风格的工具条 t.CreateEx(this,TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);   //工具条加载图片   t.LoadBitmap(IDB_BITMAP1);   //设置按钮   t.SetButtons(tool,11);   //工具条可以停靠在任何位置   t.EnableDocking(CBRS_ALIGN_ANY);   //框架接受任意停靠位置     EnableDocking(CBRS_ALIGN_ANY);   //执行停靠工具条   DockControlBar(t,AFX_IDW_DOCKBAR_TOP);   在前面的基础之上,我们有添加了五个工具条按钮。再在消息映射中添加如下代码  ON_COMMAND(ID_DRAW_LINE,line)   ON_COMMAND(ID_DRAW_RECT,rect)   ON_COMMAND(ID_DRAW_ROUND_RECT,round_rect)   ON_COMMAND(ID_DRAW_CIRCLE,circle)   ON_COMMAND(ID_DRAW_CURVE,curve)   我们有消息映射,在添加消息映射处理函数  void line()   {    ::MessageBox(0,line,消息,MB_OK);   }   void rect()   {   ::MessageBox(0,rect,消息,MB_OK);   }   void round_rect()   {   ::MessageBox(0,round_rect,消息,MB_OK);   }   void circle()   {   ::MessageBox(0,circle,消息,MB_OK);   }   void curve()   {   ::MessageBox(0,curve,消息,MB_OK);   }   这时,我们的准备工作已做好。开始画图之前,我们还要讲一个概念——无效区域。我们知道,我们的显示器就是一块画布,我们切换窗口,显示器是不是要重新画一遍画布,这个问题要看情况。因为,画一遍画布(我们也叫重绘)是很费资源的,所以,我们就想要重绘一部分区域,我们如何知道要重绘那部分区域呢?我们将这个区域,设成要求重绘的矩形区域之后,重新绘制该区域。我们把这个区域称为无效区域。以后我们要重新绘制什么东东的时候,就可以将它设成无效区域。   那么将这个区域设成了无效区域之后,谁来重新绘制它,如何绘制它呢?那么任何影响窗口的操作都会引发WM_PAINT消息,那么

文档评论(0)

中华书局 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档