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
字段.该处理器应该检查,以找出是否需要擦除背景本身,或者如果它已经被完成.(虽然我从来没有真正见过任何人检查它.)如果你让它处理它会返回,如果它有一个颜色编号或刷子,如果是.PAINTSTRUCT
WM_PAINT
BeginPaint
WM_PAINT
fErase
WM_ERASEBKGND
DefWindowProc
WM_ERASEBKGND
TRUE
FALSE
hbrBackground
NULL