抑制WM_ERASEBKGND的正确方法是什么?

EFa*_*nZh 3 winapi doublebuffered

如果我需要使用双缓冲,我需要抑制WM_ERASEBKGND消息.

我可以WM_ERASEBKGND立即处理并返回.但是,我可以设置WNDCLASS/ WNDCLASSEXhbrBackgroundNULL,而不是处理的WM_ERASEBKGND消息?这是正确的方法吗?

Adr*_*thy 5

是的,设置hbrBackgroundNULL避免实现无操作WM_ERASEBKGND处理程序的适当方法.

当你传递WM_ERASEBKGNDDefWindowProc它时,它会检查窗口类中的背景画笔.如果有的话,用它填充肮脏的区域.如果背景画笔为null,则它不执行任何操作并返回.这与拥有自己的无操作WM_ERASEBKGND处理程序基本相同.

WM_ERASEBKGND处理程序的返回值会影响调用时获得的fErase字段.该处理器应该检查,以找出是否需要擦除背景本身,或者如果它已经被完成.(虽然我从来没有真正见过任何人检查它.)如果你让它处理它会返回,如果它有一个颜色编号或刷子,如果是.PAINTSTRUCTWM_PAINTBeginPaintWM_PAINTfEraseWM_ERASEBKGNDDefWindowProcWM_ERASEBKGNDTRUEFALSEhbrBackgroundNULL

  • 请注意,您__still__然后发送了一个`WM_ERASEBKGND`.唯一不同的是,如果你不处理它,没有任何事情发生(可以忽略). (2认同)