MFC中Invalidate()函数的使用方法,求解!

shenjbk00 2012-03-12 12:55:25
比如,我想在窗口中把以前输出的东西清除,然后再输出我想要的东西:

Invalidate(true);
TextOut(0,0,str);

理论上讲它应该是先窗口重绘,把以前的东西擦除,然后再输出str的内容,但是为什么窗口是重绘了,但是TextOut的内容也被擦出了呢?
那我要是想要擦除以前输出的内容,然后再输出新的内容,该怎么弄啊?静候高手出现!
...全文
1108 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
GPoint 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 abc20002929 的回复:]
The client area is marked for painting when the next WM_PAINT message occurs.
1.窗口区域仅仅被标记为重绘,但并未马上重绘,要等WM_PAINT消息。
Windows sends a WM_PAINT message whenever the CWnd update region is not empty and t……
[/Quote]

四楼正解

重绘是很浪费CPU的,Windows为了提高性能。将重绘消息的优先级设计的很低,这样可以避免频繁的重绘,浪费系统资源。
chenkuan9zl 2012-03-13
  • 打赏
  • 举报
回复
Invalidate(true);
WM_PAINT消息的优先级非常低 就比WM_TIME 高那么点 要是消息队列里有其他消息是不会重绘窗口 而你的 你的TEXTOUT先执行了
向立天 2012-03-13
  • 打赏
  • 举报
回复
这两个函数没有写到一起的
绘制函数应该整理到OnPaint中
在想激活重回的位置调用Invalidate
shenjbk00 2012-03-13
  • 打赏
  • 举报
回复
感谢楼上各大神们的回答,小弟受教了。
wltg2001 2012-03-12
  • 打赏
  • 举报
回复
Invalidate(true);
TextOut(0,0,str);
==========
Invlidate并不能完成重绘,它只是触发WM_PAINT消息而已。从发出消息到响应消息是要时间的,应该是响应消息时,你的TextOut已经执行了。
  • 打赏
  • 举报
回复
你是否把Invalidate放到OnDraw里了
dvlinker 2012-03-12
  • 打赏
  • 举报
回复
Invalidate()只是通知窗口去刷新,即让系统产生一个WM_PAINT消息发送到消息队列中,但并不是立即执行。代码应该放到OnPaint/OnDraw函数中去实现。
abc20002929 2012-03-12
  • 打赏
  • 举报
回复
而你的意图应该是在重绘后,再Textout。当然,直接把Textout放重绘里面(OnPaint/OnDraw)是可以的
abc20002929 2012-03-12
  • 打赏
  • 举报
回复
The client area is marked for painting when the next WM_PAINT message occurs.
1.窗口区域仅仅被标记为重绘,但并未马上重绘,要等WM_PAINT消息。
Windows sends a WM_PAINT message whenever the CWnd update region is not empty and there are no other messages in the application queue for that window.
2.WM_PAINT在消息队列里无其他任何消息时才发送。
也就是说,重绘发生在你的Textout之后
sumos 2012-03-12
  • 打赏
  • 举报
回复
可能是TextOut中的HDC句柄无效。
faremn000 2012-03-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
你的代码是写在哪里,TextOut()绘制的操作放到OnPaint/OnDraw函数中。
如果刷新的地方调用InvalidateRect/Invalidate()即可。
[/Quote]
++
Eleven 2012-03-12
  • 打赏
  • 举报
回复
你的代码是写在哪里,TextOut()绘制的操作放到OnPaint/OnDraw函数中。
如果刷新的地方调用InvalidateRect/Invalidate()即可。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧