c++ - 一旦失去焦点如何更新屏幕

标签 c++ winapi visual-c++

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

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

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

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

最佳答案

首先,根据上面的评论,从不使用SendMessagePostMessage 手动发送WM_PAINT。使用 InvalidateRect 指示重新绘制窗口。

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

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

关于c++ - 一旦失去焦点如何更新屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13482506/

相关文章:

c++ - 字符串池/实习——这是好的做法吗?

c++ - 应用程序启动后如何隐藏命令提示符?

c++ - 在 C++ 中以编程方式将资源加载为字节数组

c# - 当外部应用程序的窗口移动时移动窗口

c# - 检测到 CallbackOnCollectedDelegate

c++ - 如何将预建库添加到 VC++ 解决方案中?

c++ - 如何使用 wxWidgets 和 C++ 绘制单色图像,然后将其 "dump"转换为 vector ?

C++ 库路径包含

关于图形/渲染的 C++/CLI 或纯 C++

c++ - 将输出帧保存为图像文件 CUDA 解码器