窗口背景
窗口背景是用于在窗口开始绘制之前填充工作区的颜色或图案。 窗口背景覆盖窗口在移动窗口之前屏幕上的内容,擦除现有图像,并阻止应用程序的新输出与不相关的信息混合。
当应用程序 调用 beginPaint时,系统会绘制窗口的背景,或者通过向其发送 WM_ERASEBKGND 消息来为窗口绘制背景。 如果应用程序未处理该消息,但将其传递给 defWindowProc,则系统会通过使用窗口类指定的后台画笔中的模式填充它来清除背景。 如果画笔无效或类没有后台画笔,则系统会在 PAINTSTRUCT 结构中设置 fErase 成员,该结构 BeginPaint 返回,但不会执行其他作。 然后,应用程序有第二次机会绘制窗口背景(如有必要)。
如果它处理 WM_ERASEBKGND,应用程序应使用消息的 wParam 参数来绘制背景。 此参数包含窗口的显示设备上下文的句柄。 绘制背景后,应用程序应返回非零值。 这可确保当应用程序处理后续 WM_PAINT 消息时,BeginPaint 不会错误地将 PAINTSTRUCT 结构的 fErase 成员设置为非零值(指示应清除背景)。
应用程序可以通过向 RegisterClass 函数注册类时,向 WNDCLASS 结构的 hbrBackground 成员分配画笔句柄或系统颜色值来定义类背景画笔。 GetStockObject 或 CreateSolidBrush 函数可用于创建画笔句柄。 系统颜色值可以是为 SetSysColors 函数定义的值之一。 (该值必须在分配给成员之前增加一个值。
即使定义了类背景画笔,应用程序也可以处理 WM_ERASEBKGND 消息。 这是典型的应用程序,使用户能够更改指定窗口的背景色或模式,而不会影响类中的其他窗口。 在这种情况下,应用程序不得将消息传递给 defWindowProc 。
应用程序不需要对齐画笔,因为系统使用窗口原点作为引用点绘制画笔。 鉴于此情况,用户可以移动窗口,而不会影响图案画笔的对齐方式。