0

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

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

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

即使在我的窗口失去焦点(WM_KILLFOCUS)之后,是否有任何方法可以继续我的窗口的绘图操作(例如,继续调用 wm_paint)?

4

1 回答 1

3

首先,从上面的评论中,永远不要使用orWM_PAINT手动发送。用于指示要重新绘制的窗口。SendMessagePostMessageInvalidateRect

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

正如其他人提到的那样,焦点与重新绘制无关,即使在背景中,您的窗口也应该正常绘制。

于 2012-11-20T21:51:39.910 回答