如果我需要使用双缓冲,我需要抑制 WM_ERASEBKGND
消息。
我可以处理WM_ERASEBKGND
并立即返回。但是我可以将 WNDCLASS
/WNDCLASSEX
的 hbrBackground
设置为 NULL
并且不处理 WM_ERASEBKGND
消息?这是正确的方法吗?
最佳答案
是的,将 hbrBackground
设置为 NULL
是避免实现无操作 WM_ERASEBKGND
处理程序的适当方法。
当您将 WM_ERASEBKGND
传递给 DefWindowProc
时,它会检查窗口类中的背景画笔。如果有的话,它就会用它填充脏区域。如果背景画笔为空,则不执行任何操作并返回。这本质上与拥有自己的不执行任何操作的 WM_ERASEBKGND
处理程序相同。
WM_ERASEBKGND
处理程序的返回值会影响 WM_PAINT
调用时获取的 PAINTSTRUCT
的 fErase
字段开始绘制
。 WM_PAINT
处理程序应该检查 fErase
以查明是否需要删除背景本身,或者是否已由 WM_ERASEBKGND
完成。 (虽然我从未真正见过有人检查过它。)如果您让 DefWindowProc
处理 WM_ERASEBKGND
,如果它有颜色编号,它将返回 TRUE
如果 hbrBackground
为 NULL
,则刷子和 FALSE
。
关于winapi - 抑制 WM_ERASEBKGND 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12073721/