VC中如何立即更新窗口

最近我在练习编写中国象棋程序时时,遇到以下问题:在CView中调用InvalidtaRect(rect);时为什么不会引发窗口重绘?甚至补了一个语句:UpdateWind... 最近我在练习编写中国象棋程序时时,遇到以下问题:
在CView中调用InvalidtaRect(rect);时为什么不会引发窗口重绘?甚至补了一个语句:UpdateWindow();还是不行。而如果把以上两句改为整个窗口重绘:Invalidate();则能立即更新,但会引起屏幕闪烁(如果用兼容CD方法可避免闪烁,但程序效率不高)。请问应如何编写代码保证只更新局部区域,而且是立即更新?
请注意我想知道的是如何只更新局部区域,而不是整窗口。更新整窗口只需调用Invalidate();就够了,但显然不是好的办法,而且引起来窗口闪烁。
展开
 我来答
hi_xjy
2010-11-19 · TA获得超过2468个赞
知道大有可为答主
回答量:987
采纳率:0%
帮助的人:1528万
展开全部
InvalidateRect():
该函数向指定的窗体添加一个矩形,然后窗口客户区域的这一部分将被重新绘制。
BOOL InvalidateRect(
HWND hWnd, // handle of window with changed update region
CONST RECT *lpRect, // address of rectangle coordinates
BOOL bErase // erase-background flag
);
参数:
hWnd:要更新的客户区所在的窗体的句柄。如果为NULL,则系统将在函数返回前重新绘制所有的窗口, 然后发送 WM_ERASEBKGND 和 WM_NCPAINT 给窗口过程处理函数。
lpRect:无效区域的矩形代表,它是一个结构体指针,存放着矩形的大小。如果为NULL,全部的窗口客户区域将被增加到更新区域中。
bErase:指出无效矩形被标记为有效后,是否重画该区域,重画时用预先定义好的画刷。当指定TRUE时需要重画。
返回值: 函数成功则返回非零值,否则返回零值。
说明:被标记为无效矩形的区域直到WM_PAINT消息被处理完之后才会消失,或者使用ValidateRect(),ValidateRgn()函数来使之有效。当应用程序的消息队列中为空时,并且窗体要更新的区域非空时,系统会发送一个WM_PAINT消息到窗体。
l247850311
2012-04-11
知道答主
回答量:11
采纳率:0%
帮助的人:1.7万
展开全部
不要再OnDraw函数中加Invalidate(),应该在ondraw之前加。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式