OnPaint中画图遇到的问题

🏷️ 365直播网网络电视台 📅 2025-07-23 14:52:50 👤 admin 👁️ 6540 ❤️ 190
OnPaint中画图遇到的问题

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

相关内容

淘金矿客怎么玩?淘金矿客赚钱攻略
365直播网网络电视台

淘金矿客怎么玩?淘金矿客赚钱攻略

📅 07-18 👁️ 4885
新区一定要选这些门派,效率直接提升30%
约彩365ios下载

新区一定要选这些门派,效率直接提升30%

📅 07-13 👁️ 1538
mes系统需要什么硬件,MES系统硬件需求概览