为什么 WM_ERASEBKGND 有单独的消息?

6

我从来没有真正理解为什么擦除背景需要单独的窗口消息,这对我来说有点多余。当我创建自绘按钮时,我总是在WM_PAINT中擦除背景。我甚至有时会在WM_ERASEBKGND内完成所有绘画,并将WM_PAINT留空。这两种方法似乎都很好用。将绘画分成两个步骤有什么优势吗?


4
如下所述,这是旧时代的剩余。对于现代应用程序,您应该始终在响应“WM_ERASEBKGND”时返回1(TRUE),并在“WM_PAINT”中执行绘制操作(以避免闪烁)。而且,重要的是只绘制一次到屏幕上,以避免闪烁。如果需要绘制复杂的图形,请使用内存 DC 作为第一次绘制的目标。可以在此处方便地获取一个链接 - demorge
@demorge,如果期望WM_PAINT自己擦除背景,则应从WM_ERASEBKGND返回FALSE - finnw
1个回答

4
这完全是猜测:
在旧时代,用颜色填充一个矩形是相对缓慢的操作。但是,填充一个大矩形仍然比填充许多小矩形要快得多。
我猜如果你有一个窗口和一个子窗口,它们都有相同的背景画刷注册,那么Windows会聪明地意识到当它已经清除父窗口时就不需要向子窗口发送WM_ERASEBKGND消息。在非常慢的PC上使用中等复杂的对话框,这可能是一个显著的改进。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接