Invalidate用法

Invalidate用法转自与 https blog csdn net piaopiaopiao article details 使用 Invalidate TRUE 函数时 它会向消息队列中添加了 WM ERASEBKGND 和 WM PAINT 两个消息 使用 Invalidate FALSE 函数时 它只会向消息队列中添加了 W

转自与https://blog.csdn.net/piaopiaopiaopiaopiao/article/details/

使用Invalidate(TRUE)函数时,它会向消息队列中添加了WM_ERASEBKGND和WM_PAINT两个消息。

使用Invalidate(FALSE)函数时,它只会向消息队列中添加了WM_PAINT消息。

WM_ERASEBKGND消息的作用以背景色填充客户区,因此他会将之前绘制的图像情况,然后响应WM_PAINT消息后,会调用OnPaint函数,进行响应图像绘制工作。故Invalidate(TRUE)相当于将原来画的内容清空后,重新绘制。

而Invalidate(TRUE)只发送WM_PAINT消息,会调用OnPaint函数,进行响应图像绘制工作。故Invalidate(TRUE)的作用相当于在原来绘图的基础上继续画图。

打个比方:小明准备在黑板上画画,他准备画一只鸡和一只鸭

情形一:当画完小鸡后,小明觉得画的不像,于是将黑板擦擦除所画的小鸡,重新画。这相对于Invalidate(TRUE)函数的处理过程。

情形二:当画完小鸡后,小明觉得画得想当逼真,于是在此基础上继续画另一只鸭。这相对于Invalidate(FALSE)处理过程。

实验源码(对话框工程,在OnPaint函数中添加代码):

  1. CPaintDC dc(this);  
  2. int x = rand()%200;  
  3. int y = rand() % 200;         
  4. dc.Ellipse(CRect(CPoint(x, y), CSize(100, 100)));         
  5. x = rand() % 200;  
  6. y = rand() % 200;  
  7. CBrush brush(RGB(0, 0, 255));  
  8. dc.FillRect(CRect(CPoint(x, y), CSize(100, 100)), &brush);  
CPaintDC dc(this); int x = rand()%200; int y = rand() % 200; dc.Ellipse(CRect(CPoint(x, y), CSize(100, 100))); x = rand() % 200; y = rand() % 200; CBrush brush(RGB(0, 0, 255)); dc.FillRect(CRect(CPoint(x, y), CSize(100, 100)), &brush); 

在OnInitDialog函数中 设置定时器:

添加WM_TIME消息响应,在OnTimer函数中添加:

运行结果:

Invalidate用法

而将Invalidate(TRUE)改为:

运行结果为:

Invalidate用法

可见:Invalidate(FALSE)不会清空之前所画图像。

如果你想用Invalidate(TRUE)来实现Invalidate(FALSE)一样的效果,你可以添加对WM_ERASEBKGND消息响应的函数,修改OnEraseBkgnd函数为:

  1. BOOL CaaDlg::OnEraseBkgnd(CDC* pDC)  
  2. {  
  3.     return TRUE;  
  4. }  
BOOL CaaDlg::OnEraseBkgnd(CDC* pDC) { return TRUE; }

此时Invalidate(TRUE)与Invalidate(FALSE)的效果是一样的。

 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208102.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:21
下一篇 2026年3月19日 下午12:21


相关推荐

  • typescript 中文手册

    typescript 中文手册typescript 中文手册或者 TypeScript 手册中文版

    2026年3月20日
    2
  • 购物网页设计php实验报告,购物网站设计-Web实验报告

    购物网页设计php实验报告,购物网站设计-Web实验报告购物网站设计 Web 实验报告 JIANGSUUNIVE 班级 学生姓名 学号 完成时间 2014 年 11 月 18 日购物网站设计报告购物网站设计报告一 设计要求 1 购物车包含注册页面 登录页面 购物页面 购物车四个页面 2 在购物页面中 将页面信息与数据库绑定 直接将数据库中的内容显示到网页上 另外 对 名称 设计超链接 点击进入商品的详

    2026年3月19日
    2
  • mysql时间戳转为日期格式_mysql时间戳与日期格式的相互转换

    mysql时间戳转为日期格式_mysql时间戳与日期格式的相互转换1、UNIX时间戳转换为日期用函数:FROM_UNIXTIME()[sql]viewplaincopyselectFROM_UNIXTIME(1156219870);输出:2006-08-2212:11:102、日期转换为UNIX时间戳用函数:UNIX_TIMESTAMP()[sql]viewplaincopySelectUNIX_TIMESTAMP(‘2006-11-04…

    2022年6月21日
    39
  • 卸载Oracle 12c

    卸载Oracle 12c完全卸载 Oracle12c 前言 1 停止服务 Oracle 服务 2 卸载 Oracle 软件合理的创建标题 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右 SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必不可少的 KaTeX 数学公式新的甘特图功能 丰富你的文章 UML 图表 FLowchart 流程图导出与导入导出导入前言你好 卸载 Oracle 和卸载普通软件不一样 本文主要简述如何完全卸载 Oracle12c 主要分

    2026年3月26日
    2
  • war包解压后怎么重新打war包_war包和zip

    war包解压后怎么重新打war包_war包和zip$ClipboardContent$

    2022年10月4日
    4
  • 一窥直播技术新趋势「建议收藏」

    一窥直播技术新趋势「建议收藏」历经2016直播元年的爆发,直播App的虚火逐步降温,行业逐渐恢复理性,并不断探索新的产品形态与创新。这其中,技术扮演了不可或缺的角色,新的编码与传输协议,覆盖全球的网络架构,低延迟的音频传输与白板,基于深度学习的图像识别等,这一切进一步加强了各直播参与方的互动。基于Html5的直播技术,AR/VR,H.265编码普及,高清直播成本进一步降低,人工智能等技术又将让直播充满了更多想象。

    2022年7月21日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号