小甲鱼 发表于 2016-4-20 00:16:44

WM_PAINT 消息

注:本文档由 ouyunfu 翻译,小甲鱼校对。

原文链接 -> 传送门

消息含义:

当系统或其他应用程序要求绘制应用程序窗口的一部分时, WM_PAINT 消息将被发送。当 UpdateWindow 或 RedrawWindow 函数被调用时,该消息也将被发送。或者,当应用程序通过使用的 GetMessage 或 PeekMessage 函数获得 WM_PAINT 消息时,该消息通过 DispatchMessage 函数发送。

一个窗口通过它的 WindowProc 函数接收该消息。


消息定义:

#define WM_PAINT                        0x000F

参数解析:

wParam:这个参数不使用。

lParam:这个参数不使用。


返回值

如果一个应用程序处理此消息,它会返回 0。


备注:

1. WM_PAINT 消息由系统生成,并且不应由应用程序进行发送。要强制一个窗口绘制成特定的设备环境,使用 WM_PRINT 或 WM_PRINTCLIENT 消息。注意,这需要目标窗口支持 WM_PRINTCLIENT 消息。大多数控件都支持 WM_PRINTCLIENT 消息。

2. DefWindowProc 函数验证更新区域。如果窗框必须绘制,该函数还可以发送 WM_NCPAINT 消息给窗口程序。如果必须删除窗口背景,该函数将发送 WM_ERASEBKGND 消息。

3. 当应用程序的消息列表中没有其他消息,系统将发送此消息。DispatchMessage 函数决定向何处发送消息;GetMessage 函数决定分配哪个消息。当应用程序的消息列表中没有其他消息,GetMessage 函数将返回 WM_PAINT 消息,且 DispatchMessage 函数将发送消息给合适的窗口程序。

4. 当调用 http://bbs.fishc.com/thread-72215-1-1.html]RedrawWindow 函数且 RDW_INTERNALPAINT 标志被设置时,窗口可能会收到内部消息。在这种情况下,窗口可能没有更新区域。应用程序可以调用 GetUpdateRect 函数来确定窗口是否有一个更新的区域。如果 GetUpdateRect 函数返回 0,应用程序不需要调用 BeginPaint 和 EndPaint 函数。

5. 应用程序必须通过查看每个 WM_PAINT 消息其内部数据结构,以检查任何必要的内部绘制,因为 WM_PAINT 消息可能是由非空更新区域和调用 RedrawWindow 函数且 RDW_INTERNALPAINT 标志被设置引起的。

6. 系统仅发送一次内部 WM_PAINT 消息。在内部 WM_PAINT 消息从 GetMessage 或 PeekMessage 函数返回之后,或由 UpdateWindow 函数发送到窗口后,系统不会进一步发送 WM_PAINT 消息,直到窗口无效或直到再次调用 RedrawWindow 函数且 RDW_INTERNALPAINT 标志被设置。

7. 对于一些常用的控件,默认 WM_PAINT 消息处理检查 wParam 参数。如果 wParam 参数非 NULL,控制假设值是 HDC 并且使用该设备环境进行绘制。


需求:


Minimum supported client Windows 2000 专业版 [仅桌面应用程序]
Minimum supported server Windows 2000 服务器版 [仅桌面应用程序]
Header Winuser.h (包含于 Windows.h)


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

页: [1]
查看完整版本: WM_PAINT 消息