我正在开发一个需要禁用WM_ERASEBKGND的程序(以避免闪烁)。
问题出现在我的主窗口失去焦点,而另一个窗口(另一个程序)获得焦点时。
具有焦点的窗口(不是我的程序)每次经过它都会使我的程序窗口无效!结果是,我的窗口的屏幕在另一个窗口经过的地方变成了白色,之后几乎完全空白。显然,我没有一个程序,每当它失去焦点时屏幕就会变白。
有没有办法继续我的窗口的绘图操作,(例如,在我的窗口失去焦点后,继续调用wm_paint)(WM_KILLFOCUS)?
答案 0 :(得分:3)
首先,根据上述评论,从不使用WM_PAINT
或SendMessage
手动发送PostMessage
。使用InvalidateRect
指示重新绘制窗口。
关于WM_ERASEBKGND
,返回值用于指示已擦除背景的WM_PAINT
处理程序,以防可以优化绘制过程。要实际阻止删除背景,请不要为该消息调用DefWndProc()
。或者更简单的是,在窗口类中将hbrBackground
设置为NULL
。
正如其他人所说,焦点与重新绘制无关,即使在后台,你的窗口也应正常绘制。