鱼C论坛

 找回密码
 立即注册
查看: 3272|回复: 0

[API档案] WM_PAINT 消息

[复制链接]
发表于 2016-4-20 00:16:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

原文链接 -> 传送门

消息含义:

当系统或其他应用程序要求绘制应用程序窗口的一部分时, WM_PAINT 消息将被发送。当 UpdateWindowRedrawWindow 函数被调用时,该消息也将被发送。或者,当应用程序通过使用的 GetMessagePeekMessage 函数获得 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. 当调用 [url= http://bbs.fishc.com/thread-72215-1-1.html]RedrawWindow[/url] 函数且 RDW_INTERNALPAINT 标志被设置时,窗口可能会收到内部消息。在这种情况下,窗口可能没有更新区域。应用程序可以调用 GetUpdateRect 函数来确定窗口是否有一个更新的区域。如果 GetUpdateRect 函数返回 0,应用程序不需要调用 BeginPaintEndPaint 函数。

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

6. 系统仅发送一次内部 WM_PAINT 消息。在内部 WM_PAINT 消息从 GetMessagePeekMessage 函数返回之后,或由 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)所有,转载请注明来源。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表