Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

C/C++实战专栏
同时被 3 个专栏收录
¥89.90
¥99.00
535 篇文章

目录

1、WM_PAINT消息的产生

2、WM_ERASEBKGND消息说明

3、InvalidateRect和UpdateWindow

4、何时使用BeginPaint和EndPaint?


       在做Windows应用程序开发时,我们要处理多个Windows窗口消息,其中WM_PAINT窗口绘制消息在我们自绘窗口时会频繁地用到。有很多新人遇到与WM_PAINT消息相关的InvalidateRect、UpdateWindow、BeginPaint、EndPaint等函数时,会有很多疑惑,搞不清楚它们之间的关系,今天就来详细地给大家讲述一下这方面的内容。

1、WM_PAINT消息的产生

       WM_PAINT消息是系统产生的,应用程序是不能给窗口发送该消息的。系统会去定期检测窗口中是否有无效区域,如果有则系统会产生一个WM_PAINT消息,并将消息放置到窗口所属线程的消息队列中。然后消息循环从消息队列中取出WM_PAINT消息,派发给对应的窗口:

 这样消息就进入了窗口的窗口处理过程函数,进而执行到处理WM_PAINT消息的代码。

      那什么时候窗口才会有无效区域呢?有很多场景会使窗口产生无效区域。比如窗口初次创建时整个窗口区域都是无效的,需要去绘制;当目标窗口被其他窗口覆盖,其他窗口移走时,目标窗口就会产生需要刷新绘制的无

VIP 深入浅出InvalidateRect:高效控制Windows窗口重绘的完整指南 在Windows桌面应用开发中,窗口重绘性能直接影响界面流畅度与CPU占用。熟悉消息驱动的图形系统是优化基础:系统通过低优先级的WM_PAINT消息统一处理无效区域,而不是让程序实时绘制。这一机制以InvalidateRect为核心接口,它标记需要重绘的矩形区域,并交由系统调度完成合并与绘制。理解其参数含义(窗口句柄、区域矩形、擦除标志)及与WM_PAINT的配合方式,是摆脱画面闪烁、拖尾和无效刷新的关键。在实际工程中,通过精确细化失效矩形、合理使用UpdateWindow、配合双缓冲技术,能显著减少重复绘 开通可读全文·188 阅读·0 点赞·7 收藏 阅读全文

相关推荐

C++程序编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint详解

Windows编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint详解。

dvlinker的技术专栏 9192

WM_PAINT 消息

对 MSDN 上 WM_PAINT 消息的详细翻译。 隶属于 Platform SDK Windows GDI 绘图消息。 后续会更新别消息-对MSDN的翻译。

D类功放几种常见“爆破音”问题根源与改善措施

在数字D类功放刚上电或功放播放状态切换时,人耳偶尔会听到“嘣”的声音,我们把这个爆破的Pop Noise。数字功放Pop Noise 出现的原因有很多,本文主要分析Pop Noise 出现原因,并提供相应解决方法。

qq_26815321的博客 3589

告别手动翻页!用幻影联动+DLL调用,5分钟搞定通达信分时指标自动选股

本文详细介绍了如何利用幻影联动软件结合DLL调用技术,实现通达信分时指标的自动化选股。通过改造指标代码和配置幻影联动任务,用户可以在5分钟内完成从信号检测到自动报警的全流程,大幅提升短周期交易的效率和准确性。

weixin_42561040的博客 764

【论文阅读】2021-(Pidinet)Pixel Difference Networks for Efficient Edge Detection

文章目录摘要1. Introduction 摘要 motivations: 基于CNN的边缘检测的高性能是通过一个大的预训练CNN主干来实现的,该主干占用大量内存和能量。传统边缘检测器(如Canny、Sobel和LBP)很少被研究。 contributions: 提出了一种简单、轻量级但有效的架构,称为像素差分网络(PiDiNet),用于有效的边缘检测。PiDiNet采用了新颖的像素差卷积,将传统的边缘检测算子集成到现代CNN中流行的卷积运算中,以增强任务性能。 experiments: 在BSDS500

轻舟的万重重山 1万+

安装Tailscale

如果返回 /usr/bin/tailscale 或类似路径,说明已安装但 sudo 可能找不到它。如果 which tailscale 没有输出,说明安装失败,重新执行安装步骤。Tailscale 的后台服务 tailscaled 必须运行。检查 tailscaled 服务是否运行。检查 tailscale 命令是否存在。

FairLikeSnow的博客 1467

大模型时代必备技能:3种向量量化技术对比(PQ/AQ/RVQ)与选型指南

本文深入解析了大模型时代处理海量向量数据的关键技术——向量量化。通过对比Product Quantization (PQ)、Additive Quantization (AQ)和Residual Vector Quantization (RVQ)三种主流技术的核心原理、性能表现与适用场景,为工程师提供了从理论到实践的选型指南,旨在解决向量存储与检索的效率瓶颈,助力RAG等大模型应用高效落地。

silver的专栏 795

【Tessent Shell Users Manual】【Ch3】Design Introspection and Editing(未完待续)

Tessent Shell 提供了一系列用于检查(examining/introspecting)和编辑design的命令。

Tranquil_ovo的博客 1730

NVIDIA - 人形机器人扼要

人形机器人是仿照人类外形设计的通用双足机器人,旨在与人类并肩工作,提高生产效率。它们能够学习和执行各种任务,如抓取物体、移动集装箱、装卸箱子等。

机器人控制与仿真应用 1288

华为OD机试真题2026双机位C卷 C语言 实现【主次关联成环警告】

在ICT运维领域,现网运维工程师面向对设备上报的众多告警,往往需要筛选出最主要的告警优先处理,次等级的告警或许为同一个根因导致的告警,处理优先级会放后或者不处理,这样就诞生出主次关联告警的概念。给定一系列告警的主次关联关系,判断是否存在如下情况:

MISAYAONE的博客 172

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 解决win10系统中调用DrawText时传入DT_ENDELLIPSIS仍然不显示省略号的问题
下一篇: C/C++常用预编译指令介绍
dvlinker
dvlinker 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄19年 13万+粉丝 1015原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值