为什么WM_ERASEBKGND有单独的消息

sas*_*alm 6 winapi ownerdrawn

我从来没有完全理解为什么擦除背景有一个单独的Windows消息.我看起来有点多余.当我创建自己绘制的按钮时,我总是最终从WM_PAINT中删除背景.我有时甚至从WM_ERASEBKGND内部完成所有绘画并将WM_PAINT留空.两者似乎都很好.将绘画分成2个操作有什么好处吗?

arx*_*arx 4

这完全是猜测:

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

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