EFa*_*nZh 3 winapi doublebuffered
如果我需要使用双缓冲,我需要抑制WM_ERASEBKGND消息.
我可以WM_ERASEBKGND立即处理并返回.但是,我可以设置WNDCLASS/ WNDCLASSEX的hbrBackground来NULL,而不是处理的WM_ERASEBKGND消息?这是正确的方法吗?
是的,设置hbrBackground为NULL避免实现无操作WM_ERASEBKGND处理程序的适当方法.
当你传递WM_ERASEBKGND给DefWindowProc它时,它会检查窗口类中的背景画笔.如果有的话,用它填充肮脏的区域.如果背景画笔为null,则它不执行任何操作并返回.这与拥有自己的无操作WM_ERASEBKGND处理程序基本相同.
WM_ERASEBKGND处理程序的返回值会影响调用时获得的fErase字段.该处理器应该检查,以找出是否需要擦除背景本身,或者如果它已经被完成.(虽然我从来没有真正见过任何人检查它.)如果你让它处理它会返回,如果它有一个颜色编号或刷子,如果是.PAINTSTRUCTWM_PAINTBeginPaintWM_PAINTfEraseWM_ERASEBKGNDDefWindowProcWM_ERASEBKGNDTRUEFALSEhbrBackgroundNULL