WM_PAINT

【勇芳软件工作室】汉化HomePreviousNext

当Windows或其他应用程序请求绘制应用程序窗口的一部分时,应用程序会发送WM_PAINT消息。当应用程序通过使用GetMessagePeekMessage功能获取WM_PAINT消息时,调用UpdateWindowRedrawWindow功能或DispatchMessage功能时发送该消息。

WM_PAINT

hdc = (HDC) wParam; //要绘制的设备上下文

参数

【HDC】

标识要绘制的设备上下文。如果此参数为NULL,请使用默认设备上下文。某些常用控件使用此参数来启用在默认设备上下文之外的设备上下文中绘图。其他窗口可以安全地忽略此参数。

返回值

处理此消息时,应用程序应返回零。

备注

DefWindowProc功能验证更新区域。如果窗口框架必须被绘制,该函数还可以将WM_NCPAINT消息发送到窗口过程,并且如果窗口背景必须被擦除,则发送WM_ERASEBKGND消息。

当应用程序的消息队列中没有其他消息时,系统会发送此消息。DispatchMessage确定在哪里发送消息; GetMessage确定要发送的消息。当应用程序的消息队列中没有其他消息时,GetMessage返回WM_PAINT消息,DispatchMessage将消息发送到相应的窗口过程。

由于调用了设置了RDW_INTERNALPAINT标志的RedrawWindow,一个窗口可能会收到内部油漆消息。在这种情况下,窗口可能没有更新区域。应用程序应调用GetUpdateRect函数来确定窗口是否具有更新区域。如果GetUpdateRect返回零,应用程序不应调用BeginPaintEndPaint函数。

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

Windows仅发送一个内部WM_PAINT消息一次。在从GetMessagePeekMessage返回内部WM_PAINT消息或通过UpdateWindow发送到窗口之后,Windows不会发布或发送更多WM_PAINT消息,直到窗口无效或直到RedrawWindow再次调用RDW_INTERNALPAINT标志设置。

对于一些常见的控件,默认的WM_PAINT消息处理检查【wParam中】参数。如果【wParam中】不为NULL,则该控件假定该值为HDC并使用该设备上下文绘制。

也可以看看

BeginPaint, DefWindowProc, DispatchMessage, EndPaint, GetMessage, GetUpdateRect, PeekMessage, RedrawWindow, UpdateWindow, WM_ERASEBKGND, WM_NCPAINT