CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

Programming windows中关于绘图的一个疑问!

楼主jcreatorqijiashe(秋天的童话)2003-06-02 22:48:19 在 VC/MFC / 基础类 提问

有一段是这样说得:“在第三章的HELLOWIN程式中,我们并不关心处理WM_PAINT讯息时的无效矩形。如果文字显示区域恰巧在无效矩形内,则由DrawText恢复之”。他的意思是说用自己呼叫函数产生的字符有可能将字符串显示到无效的区域中?是这样吗?!为什么?什么情况下会产生无效矩形区域?还有这段话:“PAINTSTRUCT中的rcPaint矩形不仅是无效矩形,它还是一个「剪取」矩形。这意味著Windows将绘图操作限制在剪取矩形内(更确切地说,如果无效矩形区域不为矩形,则Windows将绘图操作限制在这个区域内)”,他的意思好像是说PAINTSTRUCT并不等于整个窗口!只是其中的一部分,这段话“例如,如果在显示区域的显示输出中包括了一个圆,但是只有圆的一部分落到了无效矩形中,它就使仅绘制圆的无效部分变得没有意义。这需要画整个圆。在您使用从BeginPaint传回的装置内容代号时,Windows不会绘制rcPaint矩形外的任何部分。  
  ”是不是说明这个问题?无效区域是怎样产生的?应该怎样理解这个“PAINTSTRUCT”!?请指点! 问题点数:50、回复次数:3Top

1 楼ATField()回复于 2003-06-02 23:43:41 得分 50

所谓无效矩形,就是Windows当你的窗口某一部分由于被其他的图形覆盖掉而需要  
  重画时传给你的矩形,用来表示这个区域  
  比如你把其他窗口拖到你的窗口上  
   
  他的意思是如果你要显示的文字在无效区内,说明这个文字需要重画,所以用DrawText来重画(回复原来的样子)  
  确实PAINTSTRUCT指定的rcPaint不一定是整个窗口  
   
  这段话“例如,如果在显示区域的显示输出中包括了一个圆,但是只有圆的一部分落到了无效矩形中,它就使仅绘制圆的无效部分变得没有意义。这需要画整个圆。在您使用从BeginPaint传回的装置内容代号时,Windows不会绘制rcPaint矩形外的任何部分。“  
  其实这句话的意思是:重画整个圆,这样更方便,不用只画落在无效矩形内的一部分  
  那样太麻烦。  
   
  Top

2 楼jcreatorqijiashe(秋天的童话)回复于 2003-06-03 23:56:04 得分 0

多谢!无效区域有什莫利用价值呢?怎样利用无效区域呢?这里programming   windows中有一个鼠标处理的例子:  
  case WM_LBUTTONDOWN:  
  iCount   =   0   ;  
  InvalidateRect   (hwnd,   NULL,   TRUE)   ;  
  return   0   ;  
                       
  case WM_MOUSEMOVE:  
  if   (wParam   &   MK_LBUTTON   &&   iCount   <   1000)  
  {  
  pt[iCount     ].x   =   LOWORD   (lParam)   ;  
  pt[iCount++].y   =   HIWORD   (lParam)   ;  
                                 
  hdc   =   GetDC   (hwnd)   ;  
  SetPixel   (hdc,   LOWORD   (lParam),   HIWORD   (lParam),   0)   ;  
  ReleaseDC   (hwnd,   hdc)   ;  
  }  
                      return   0   ;  
                       
            case   WM_LBUTTONUP:  
                      InvalidateRect   (hwnd,   NULL,   FALSE)   ;  
                      return   0   ;  
  从代码(wm_lbuttondown和wm_lbuttonup)看好像程序员故意使部分区域无效,这是为什么?什麽情况下我们希望使屏幕上的某个区域无效啊?请指点!Top

3 楼ATField()回复于 2003-06-04 00:03:27 得分 0

无效区域可以使你迫使Windows重画某些部分(InvalidateRect)  
  也可以让你知道需要重画那些部分(在WM_PAINT中)  
   
  在这里,通过调用InvalidateRect(hwnd,NULL,FALSE)  
  使得整个窗口变得无效,从而使Windows发送一条WM_PAINT消息,你的程序  
  接收这条消息,从而重画整个窗口来达到重画的目的  
   
  Top

相关问题

  • 对于MFC打印预览和绘图的一个疑问.
  • The C Programming Language里的疑问。
  • windows pdb 文件的疑问???
  • windows图形基础疑问
  • 绘图
  • 绘图
  • 绘图?
  • Windows下绘图时如何实现旋转
  • 怎么在WINDOWS开始按钮中绘图
  • 关于Windows消息的若干疑问?

关键词

  • 矩形
  • 区域
  • 文字
  • 无效
  • 重画
  • rcpaint
  • paintstruct
  • 绘制
  • 圆
  • 显示

得分解答快速导航

  • 帖主:jcreatorqijiashe
  • ATField

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo