勇芳软件工作室.汉化:  Painting and Drawing > Painting and Drawing Messages >

WM_PAINT

Previous pageReturn to chapter overviewNext page

描述

 

当系统或其他应用程序提出绘制应用程序窗口的一部分的请求时,将发送WM_PAINT消息。当应用程序通过GetMessagePeekMessage功能获取WM_PAINT消息时,调用UpdateWindowRedrawWindow功能或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_PRINTWM_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消息一次。在从GetMessagePeekMessage返回内部WM_PAINT消息或通过UpdateWindow发送到窗口之后,系统不会发布或发送进一步WM_PAINT消息,直到窗口无效或直到RedrawWindow再次调用RDW_INTERNALPAINT标志集。

 

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

 

引用文件 #INCLUDE Once

 

WinUser.inc(包括Windows.inc)