【问题标题】:Why is there a separate message for WM_ERASEBKGND为什么 WM_ERASEBKGND 有单独的消息
【发布时间】:2012-03-17 01:25:21
【问题描述】:

我一直不太明白为什么擦除背景会有单独的 Windows 消息。我看起来有点多余。当我创建了所有者绘制的按钮时,我总是从 WM_PAINT 内部擦除背景。有时我什至从 WM_ERASEBKGND 内部完成了所有的绘画并将 WM_PAINT 留空。两者似乎都工作正常。将绘画分成2个操作有什么好处吗?

【问题讨论】:

  • 如下所述,这是过去的遗留物。对于现代应用程序,您应该始终返回 1 (TRUE) 以响应 WM_ERASEBKGND 并在 WM_PAINT 中执行绘图(以避免闪烁)。仅在屏幕上绘制一次以避免闪烁也很重要。如果您需要绘制一些花哨的东西,请先使用内存 DC 进行绘制。获取here的便捷方法
  • @demorge,如果 WM_PAINT 预计会自己擦除,那么您应该从 WM_ERASEBKGND 返回 FALSE

标签: winapi ownerdrawn


【解决方案1】:

这完全是猜测:

在过去,用颜色填充矩形是一项相对缓慢的操作。但是填充一个大矩形仍然比填充许多小矩形要快得多。

我猜如果你有一个带有子窗口的窗口,并且两者都有相同的注册背景画笔,那么 Windows 足够聪明,可以意识到它不需要在已经清除子窗口时向子窗口发送 WM_ERASEBKGND父母。在非常慢的 PC 上使用一个中等复杂的对话框,这可能是一个显着的改进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2012-08-17
    • 2022-06-11
    • 2014-11-12
    • 2012-11-06
    相关资源
    最近更新 更多