窗口背景

窗口背景是在窗口开始绘制之前用于填充工作区的颜色或图案。 窗口背景覆盖在窗口移动到该处之前屏幕上的任何内容,擦除现有图像,并防止应用程序的新输出与不相关的信息混合。

系统绘制窗口的背景,或者在应用程序调用 BeginPaint 时,通过向其发送WM_ERASEBKGND消息来为窗口提供执行此操作的机会。 如果应用程序不处理消息,而是将其传递给 DefWindowProc,系统会通过在窗口的 类指定的背景画笔中填充模式来擦除背景。 如果画笔无效或类没有背景画笔,系统会在 BeginPaint 返回的 PAINTSTRUCT 结构中设置 fErase 成员,但不执行任何其他操作。 然后,如有必要,应用程序有第二次机会绘制窗口背景。

如果处理 WM_ERASEBKGND,应用程序应使用消息的 wParam 参数绘制背景。 此参数包含窗口的显示设备上下文的句柄。 绘制背景后,应用程序应返回非零值。 这可确保 BeginPaint 不会错误地将 PAINTSTRUCT 结构的 fErase 成员设置为非零值, (指示在应用程序处理后续WM_PAINT消息时应擦除背景) 。

使用 RegisterClass 函数注册类时,应用程序可以通过向 WNDCLASS 结构的 hbrBackground 成员分配画笔句柄或系统颜色值来定义类背景画笔 GetStockObjectCreateSolidBrush 函数可用于创建画笔句柄。 系统颜色值可以是为 SetSysColors 函数定义的值之一。 (必须先增加一个值,然后才能将其分配给 member.)

即使定义了类背景画笔,应用程序也可以处理 WM_ERASEBKGND 消息。 这在允许用户更改指定窗口的窗口背景色或图案而不影响 类中的其他窗口的应用程序中很常见。 在这种情况下,应用程序不得将消息传递到 DefWindowProc

应用程序不需要对齐画笔,因为系统使用窗口原点作为参照点绘制画笔。 鉴于此,用户可以移动窗口,而不会影响图案画笔的对齐方式。