RedrawWindow功能可更新窗口客户区中指定的矩形或区域。
BOOL RedrawWindow(
HWND 【的hWnd】, | //窗口的句柄 |
CONST RECT *【lprcUpdate】, | //具有更新矩形的结构的地址 |
HRGN 【hrgnUpdate】, | //更新区域的句柄 |
UINT 【旗】 | //重绘标志数组 |
); |
参数
【的hWnd】
标识要重绘的窗口。如果此参数为NULL,则会更新桌面窗口。
【lprcUpdate】
指向包含更新矩形坐标的RECT结构。如果【hrgnUpdate】参数标识一个区域,则忽略该参数。
【hrgnUpdate】
标识更新区域。如果【hrgnUpdate】和【lprcUpdate】参数都为NULL,则将整个客户机区域添加到更新区域。
【旗】
指定一个或多个重绘标志。该参数可以是使窗口无效或验证,控制重绘以及控制哪些窗口受RedrawWindow影响的标志的组合。
以下标志用于使窗口无效:
标志(无效) | 描述 |
RDW_ERASE | 当窗口重新绘制时,使窗口接收到WM_ERASEBKGND消息。还必须指定RDW_INVALIDATE标志;否则,RDW_ERASE不起作用。en |
RDW_FRAME | 导致与更新区域相交的窗口的非客户区域的任何部分接收WM_NCPAINT消息。还必须指定RDW_INVALIDATE标志;否则,RDW_FRAME无效。en除非指定了RDW_UPDATENOW或RDW_ERASENOW,否则WM_NCPAINT消息通常不会在执行RedrawWindow期间发送。 |
RDW_INTERNALPAINT | 导致WM_PAINT消息被发布到窗口,而不管窗口的任何部分是否无效。 |
RDW_INVALIDATE | 无效【lprcUpdate】或【hrgnUpdate】(只有一个可能不为空)。如果两者均为NULL,则整个窗口无效。 |
以下标志用于验证窗口:
标志(验证) | 描述 |
RDW_NOERASE | 禁止任何待处理的WM_ERASEBKGND消息。 |
RDW_NOFRAME | 禁止任何挂起的WM_NCPAINT消息。此标志必须与RDW_VALIDATE一起使用,通常与RDW_NOCHILDREN一起使用。en应谨慎使用RDW_NOFRAME,因为它可能会导致部分窗口被不正确地绘制。 |
RDW_NOINTERNALPAINT | 禁止任何挂起的内部WM_PAINT消息。此标志不影响由非空更新区域产生的WM_PAINT消息。 |
RDW_VALIDATE | 验证【lprcUpdate】或【hrgnUpdate】(只有一个可能不为空)。如果两者均为NULL,则整个窗口都将被验证。此标志不影响内部WM_PAINT消息。 |
重绘时,以下标志控制。RedrawWindow不会重新绘制,除非指定了其中一个标志。
旗 | 描述 |
RDW_ERASENOW | 导致受影响的窗口(如RDW_ALLCHILDREN和RDW_NOCHILDREN标志指定)在函数返回之前接收WM_NCPAINT和WM_ERASEBKGND消息(如有必要)。常规收到WM_PAINT消息。 |
RDW_UPDATENOW | 导致受影响的窗口(如RDW_ALLCHILDREN和RDW_NOCHILDREN标志指定)在函数返回之前接收WM_NCPAINT,WM_ERASEBKGND和WM_PAINT消息(如有必要)。 |
默认情况下,受RedrawWindow影响的窗口取决于给定窗口是否具有WS_CLIPCHILDREN样式。不是WS_CLIPCHILDREN样式的子窗口不受影响;非WS_CLIPCHILDREN窗口被递归验证或无效,直到遇到WS_CLIPCHILDREN窗口。以下标志控制哪些窗口受RedrawWindow功能的影响:
旗 | 描述 |
RDW_ALLCHILDREN | 在重绘操作中包括子窗口(如果有的话)。 |
RDW_NOCHILDREN | 从重画操作中排除子窗口(如果有的话)。 |
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
当RedrawWindow用于使部分桌面窗口无效时,桌面窗口不会收到WM_PAINT消息。要重新绘制桌面,应用程序使用RDW_ERASE标志生成WM_ERASEBKGND消息。
也可以看看
GetUpdateRect, GetUpdateRgn, InvalidateRect, InvalidateRgn, RECT, UpdateWindow