4个回答
展开全部
当窗口的客户区有无效区间,就会自动重绘。比如你调用了函数Invalidate,InvalidateRect,InvalidateRgn,就会在窗口产生无效区。然后在下一次 WM_PAINT消息来临时候就会将累计的无效区间合并,并重绘。
或者直接调用 RedrawWindow(),设置无效区并发送WM_PAINT消息重绘。
如果你修改了窗口的显示,移动了控件,在上面绘图等操作,当然需要对窗口重新绘制。或者你就是闲的没事,想让它重绘,调用UpdateWindow发送WM_PAINT;
或者直接调用 RedrawWindow(),设置无效区并发送WM_PAINT消息重绘。
如果你修改了窗口的显示,移动了控件,在上面绘图等操作,当然需要对窗口重新绘制。或者你就是闲的没事,想让它重绘,调用UpdateWindow发送WM_PAINT;
展开全部
重绘窗口一般都是由移动窗口或改变窗口大小,改变显示的数据等操作引起的。重绘窗口更新了窗口的信息,使窗口显示的内容为最新。
当编程时,常需要在改变窗口显示数据后更新窗口的信息。这时就可以通过重绘窗口来实现更新拉~
当编程时,常需要在改变窗口显示数据后更新窗口的信息。这时就可以通过重绘窗口来实现更新拉~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
通过Invalidate或InvalidateRect的方法可以显式地发送WM_PAINT,从而起到重绘窗口的作用。其中Invalidate会重绘整个窗口,而InvalidateRect可实现部分重绘。原来以为使用InvalidateRect后,Device Context就会自然选区无效区域了,今天作了一个实验发现不是这样。
以Programming with Visual C++. Net中的Ex06c为例,如果不采用OnDraw的pDC指针参数,而是直接用CDC pDC=GetDC(); 的方法,则不能实现指定区域的部分重绘,此时若拖动那个圆的话,固定的黑色方块也会跟着闪烁,说明整个窗口都重绘了。所以说OnDraw屏蔽了一些细节。
如果不是用文档/视图架构的OnDraw,而是OnPaint方法的话,可以看到自动生成的代码中有CPaintDC dc(this); 一句。查阅msdn文档,CPaintDC继承自CDC类,增加了对BeginPaint和EndPaint方法的调用。也正是BeginPaint方法实现了无效矩形区域的指定,从而实现部分重绘。这样,OnPaint时如果想调用分立的用于绘图的函数,只要将OnPaint方法中建立的CPaintDC对象的指针传递过去就可以了,这样尽量减少闪烁。
以Programming with Visual C++. Net中的Ex06c为例,如果不采用OnDraw的pDC指针参数,而是直接用CDC pDC=GetDC(); 的方法,则不能实现指定区域的部分重绘,此时若拖动那个圆的话,固定的黑色方块也会跟着闪烁,说明整个窗口都重绘了。所以说OnDraw屏蔽了一些细节。
如果不是用文档/视图架构的OnDraw,而是OnPaint方法的话,可以看到自动生成的代码中有CPaintDC dc(this); 一句。查阅msdn文档,CPaintDC继承自CDC类,增加了对BeginPaint和EndPaint方法的调用。也正是BeginPaint方法实现了无效矩形区域的指定,从而实现部分重绘。这样,OnPaint时如果想调用分立的用于绘图的函数,只要将OnPaint方法中建立的CPaintDC对象的指针传递过去就可以了,这样尽量减少闪烁。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比如,窗口被别的窗口挡住,上面的窗口移开的话,窗口就需要重绘窗口。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询