描述
当系统或其他应用程序提出绘制应用程序窗口的一部分的请求时,将发送WM_PAINT消息。当应用程序通过GetMessage或PeekMessage功能获取WM_PAINT消息时,调用UpdateWindow或RedrawWindow功能或DispatchMessage功能时发送该消息。
窗口通过其WindowProc功能收到此消息。
C++ 语法
LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); |
PowerBASIC 语法
FUNCTION WindowProc ( _ BYVAL hwnd AS DWORD, _ BYVAL uMsg AS DWORD, _ BYVAL wParam AS DWORD, _ BYVAL lParam AS LONG _ ) AS LONG |
参数
wParam
[in]不使用此参数。
lParam
[in]不使用此参数。
返回值
如果处理此消息,应用程序将返回零。
备注
WM_PAINT消息由系统生成,不应由应用程序发送。要强制窗口绘制到特定设备上下文中,请使用WM_PRINT或WM_PRINTCLIENT消息。请注意,这需要目标窗口来支持WM_PRINTCLIENT消息。最常见的控件支持WM_PRINTCLIENT消息。
DefWindowProc功能验证更新区域。如果窗口框架必须被绘制,则该函数还可以将WM_NCPAINT消息发送到窗口过程,并且如果窗口背景必须被擦除,则发送WM_ERASEBKGND消息。
当应用程序的消息队列中没有其他消息时,系统会发送此消息。DispatchMessage确定发送消息的位置; GetMessage确定要发送的消息。GetMessage返回WM_PAINT消息,当应用程序的消息队列中没有其他消息时,DispatchMessage将消息发送到相应的窗口过程。
作为调用RedrawWindow,设置了RDW_INTERNALPAINT标志的结果,窗口可能会收到内部油漆消息。在这种情况下,窗口可能没有更新区域。应用程序应调用GetUpdateRect函数来确定窗口是否具有更新区域。如果GetUpdateRect返回0,应用程序不应调用BeginPaint和EndPaint函数。
应用程序必须通过查看每个WM_PAINT消息的内部数据结构来检查任何必要的内部绘画,因为WM_PAINT消息可能是由非NULL更新区域和RedrawWindow的调用引起的,设置RDW_INTERNALPAINT标志。
系统发送内部WM_PAINT消息一次。在从GetMessage或PeekMessage返回内部WM_PAINT消息或通过UpdateWindow发送到窗口之后,系统不会发布或发送进一步WM_PAINT消息,直到窗口无效或直到RedrawWindow再次调用RDW_INTERNALPAINT标志集。
对于一些常见的控件,默认WM_PAINT消息处理检查wParam中参数。如果wParam中为非空值,则控件假定该值为HDC,并使用该设备上下文绘制。
引用文件 #INCLUDE Once
WinUser.inc(包括Windows.inc)


