如何在失去焦点后更新屏幕

时间:2012-11-20 21:30:41

标签: c++ winapi visual-c++

我正在开发一个需要禁用WM_ERASEBKGND的程序(以避免闪烁)。

问题出现在我的主窗口失去焦点,而另一个窗口(另一个程序)获得焦点时。

具有焦点的窗口(不是我的程序)每次经过它都会使我的程序窗口无效!结果是,我的窗口的屏幕在另一个窗口经过的地方变成了白色,之后几乎完全空白。显然,我没有一个程序,每当它失去焦点时屏幕就会变白。

有没有办法继续我的窗口的绘图操作,(例如,在我的窗口失去焦点后,继续调用wm_paint)(WM_KILLFOCUS)?

1 个答案:

答案 0 :(得分:3)

首先,根据上述评论,从不使用WM_PAINTSendMessage手动发送PostMessage。使用InvalidateRect指示重新绘制窗口。

关于WM_ERASEBKGND,返回值用于指示已擦除背景的WM_PAINT处理程序,以防可以优化绘制过程。要实际阻止删除背景,请不要为该消息调用DefWndProc()。或者更简单的是,在窗口类中将hbrBackground设置为NULL

正如其他人所说,焦点与重新绘制无关,即使在后台,你的窗口也应正常绘制。