RedrawWindow(NULL, NULL, RDW_INVALIDATE|RDW_ERASE|RDW_ERASENOW|RDW_ALLCHILDREN);

本文深入探讨了CWnd::RedrawWindow函数的用法,包括参数解释、返回值说明以及重画操作的控制机制。通过实例解析,帮助开发者更高效地利用此函数进行窗口重画。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CWnd::RedrawWindow
BOOL RedrawWindow(
     LPCRECT lpRectUpdate = NULL,
     CRgn* prgnUpdate = NULL,
     UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE
     );
返回值:如果窗口被成功地重画,则返回非零值;否则返回0。
参数: 
lpRectUpdate 指向一个RECT结构,其中包含了更新区域的坐标。如果prgnUpdate中包含了有效的区域句柄,则这个参数将被忽略。  
prgnUpdate 表示了更新区域。如果prgnUpdate和lpRectUpdate都为NULL,则整个客户区将被加入更新区域。  
flags 下面的标志被用于使窗口无效:
RDW_ERASE 使窗口在重画时接收到一个WM_ERASEBKGND消息。必须同时指定RDW_INVALIDATE标志;否则RDW_ERASE标志将没有效果。  
RDW_FRAME 使窗口非客户区中与更新区域重叠的任何部分接收到一条WM_NCPAINT消息。必须同时指定RDW_INVALIDATE标志,否则RDW_FRAME标志将没有效果。  
RDW_INTERNALPAINT 使一条WM_PAINT消息被传递到窗口,而不管窗口是否包含一个无效区域。  
RDW_INVALIDATE 使lpRectUpdate或prgnUpdate(仅有一个可能为NULL)无效。如果这个两个参数都为NULL,则整个窗口都无效。
 
下面的标志被用于使窗口有效: RDW_NOERASE 禁止任何未处理的WM_ERASEBKGND消息。  
RDW_NOFRAME 禁止任何未处理的WM_NCPAINT消息。这个标志必须与RDW_VALIDATE一起使用,通常也与RDW_NOCHILDREN一起使用。这个选项必须小心使用,因为它可能会使窗口的某些部分不能正确地画出。  
RDW_NOINTERNALPAINT 禁止任何未处理的内部WM_PAINT消息。这个标志不影响从无效区域产生的WM_PAINT消息。  
RDW_VALIDATE 使lpRectUpdate或prgnUpdate(仅有一个可能为NULL)有效。如果这个两个参数都为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 在重画操作中不包括子窗口,如果有的化。 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值