OnPaint中画图遇到的问题
2024-10-08 17:02:05
在OnPaint函数中有CPaintDC dc1(this);这句话,在画图时,千万不要把它去掉,否则会造成消息队列阻塞。例如定时器、Invalidate()等都会失效。
造成这种现象的原因是:
CPaintDC为窗口的OnPaint函数所使用的设备环境类。该类的构造函数会自动调用BeginPaint函数,析构函数自动调用EndPaint函数。而OnPaint是WM_PAINT消息函数,使用CpaintDC类后,才能从消息列队中删除掉该条消息,否则,Onpaint就会无限次响应WM_PAINT消息。
BeginPaint函数的作用就是将窗口需要重绘的区域设置为空(也就是Update Region置空)。在正常情况下,我们接收到了WM_PAINT消息后,窗口的Update Region都是非空的(如果为空就不需要发送WM_PAINT消息了)。而当你响应这个消息的时候又不调用BeginPaint来清空,窗口的Update Region就一直是非空的,系统就会一直发送WM_PAINT消息。这样就形成了一个处理WM_PAINT消息的死循环。因此其他消息也就被阻塞了。
如果在控件上绘图时,如果不加CPaintDC 就会造成画图闪烁,一直刷新。
最新文章
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- mongoose连接collection后自动加s的问题
- Eexcel批量设定单元格条件格式
- Knockout.Js官网学习(value绑定)
- linux下svn常用命令
- vimium: 浏览器神器
- 浅谈ImageList
- hdu 2191 完全背包
- 【转】Winform 去掉 最大化 最小化 关闭按钮(不是关闭按钮变灰)终极解决办法
- 纯css实现三角形
- Erp第二章:业务流程化、集成、规划
- CMMI 是什么东西?
- 怎么制作U盘系统/PE启动盘
- WordPress主题制作第二天
- 【Spring系列】spring mvc整合任务调度
- 自动化运维工具sshd,expect,pssh,rsync详解
- 读取文件不是真实的具体路径 setZh.ini
- poj1001
- (FZU 2150) Fire Game (bfs)
- ModuleNotFoundError: No module named '_pydevd_bundle.pydevd_cython' error on debug
热门文章
- osg 线框模式,点模式切换
- 7专题总结-高频题high frequency
- java中,小数为0,保留整数,不为0,保留小数
- js获取cookie提取用户名asp.net+html
- 梯度下降法的python代码实现(多元线性回归)
- redis 模糊查询与删除
- CVE-2019-0708 漏洞分析及相关测试
- Delphi 10.3.3 THTTPClient Post问题
- 040、Java中逻辑运算之短路与运算“&;&;”
- PowerShell中执行.net类库