在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 就会造成画图闪烁,一直刷新。

最新文章

  1. Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
  2. mongoose连接collection后自动加s的问题
  3. Eexcel批量设定单元格条件格式
  4. Knockout.Js官网学习(value绑定)
  5. linux下svn常用命令
  6. vimium: 浏览器神器
  7. 浅谈ImageList
  8. hdu 2191 完全背包
  9. 【转】Winform 去掉 最大化 最小化 关闭按钮(不是关闭按钮变灰)终极解决办法
  10. 纯css实现三角形
  11. Erp第二章:业务流程化、集成、规划
  12. CMMI 是什么东西?
  13. 怎么制作U盘系统/PE启动盘
  14. WordPress主题制作第二天
  15. 【Spring系列】spring mvc整合任务调度
  16. 自动化运维工具sshd,expect,pssh,rsync详解
  17. 读取文件不是真实的具体路径 setZh.ini
  18. poj1001
  19. (FZU 2150) Fire Game (bfs)
  20. ModuleNotFoundError: No module named '_pydevd_bundle.pydevd_cython' error on debug

热门文章

  1. osg 线框模式,点模式切换
  2. 7专题总结-高频题high frequency
  3. java中,小数为0,保留整数,不为0,保留小数
  4. js获取cookie提取用户名asp.net+html
  5. 梯度下降法的python代码实现(多元线性回归)
  6. redis 模糊查询与删除
  7. CVE-2019-0708 漏洞分析及相关测试
  8. Delphi 10.3.3 THTTPClient Post问题
  9. 040、Java中逻辑运算之短路与运算“&&”
  10. PowerShell中执行.net类库