我正在开发一个需要禁用 WM_ERASEBKGND(以避免闪烁)的程序。
当我的主窗口失去焦点,而另一个窗口(另一个程序)获得焦点时,问题就来了。
具有焦点的窗口(不是我的程序)每次经过它时都会使我的程序的窗口无效!结果是,我的窗口的屏幕在另一个窗口经过它的任何地方都变成白色,之后几乎完全空白。显然,我不能有一个每次失去焦点时屏幕都会变白的程序。
即使在我的窗口失去焦点 (WM_KILLFOCUS) 之后,有什么方法可以继续我的窗口的绘图操作(例如,继续调用 wm_paint)?
最佳答案
首先,根据上面的评论,从不使用SendMessage
或PostMessage
手动发送WM_PAINT
。使用 InvalidateRect
指示重新绘制窗口。
关于WM_ERASEBKGND
,返回值用于指示WM_PAINT
处理程序背景已被删除,以便优化绘制过程。要真正防止背景被删除,只需不要为该消息调用 DefWndProc()
。或者更简单,在窗口类中将 hbrBackground
设置为 NULL
。
正如其他人提到的,焦点与重新绘制无关,即使在后台,您的窗口也应该正常绘制。
关于c++ - 一旦失去焦点如何更新屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482506/