为什么调用invalidateRect()以后还要调用UpdateWindow()函数? 各位老大,为什么调用invalidateRect()以后还要调用UpdateWindow()函数?我没有调用updatewindow()程序也是正常啊,说明invalidateRect()也是发送了WM_PAINT消息让窗口重回了,这到底是怎么回事??谢谢大家, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 InvalidateRect 使客户区失效,但并不会发送WM_PAINT消息。UpdateWindow 发送WM_PAINT消息,重绘失效的客户区域。你说的没有调用UpdateWindow,程序也很正常,这是对的。 因为在WINDOWS操作系统中,有太多的因素会发送WM_PAINT消息,即使UpdateWindow没有被调用,也会有其它原因使程序收到了WM_PAINT消息。WM_PAINT 消息是为数不多的在消息循环中只能存在一个的消息。系统在向消息循环中添加WM_PAINT消息的时候,会检查消息循环中是否有了WM_PAINT,只有在没有的情况下,才会添加WM_PAINT消息。 这和其它消息是不一样的。 两个概念需要区分 无效的区域和窗口的需要更新区域当存在窗口的更新区域时,系统发送WM_PAINT重绘窗口指定的”更新区域“如果当前不存在窗口的需要更新区域,则系统不发送WM_PAINT消息,不过系统提供手工发送WM_PAINT系统的函数UpdateWindow。InvalidateRect 函数把参数RECT 指定的无效区域加入到窗口的需要“更新区域”中去,但并不会发送WM_PAINT消息,但系统会按一定的规则检测窗口的“更新区域”,如果存在“更新区域”,则也会发送WM_PAINT消息自动重绘窗口的“需要更新区域”,这就是“我没有调用updatewindow()程序也是正常啊”的原因 毕竟运行完函数InvalidateRect不发送WM_PAINT系统,所以不依赖系统的特性在执行完InvalidateRect函数后 再执行updatewindow()函数是个好习惯。 在一个时刻只有一个WM_PAINT消息在系统消息队列中,很多不同的无效区域会“累积”一块,放在一个WM_PAINT中,和其他消息不同,如鼠标消息等,他们是连续发送。 各位老大,为什么调用invalidateRect()以后还要调用UpdateWindow()函数?我没有调用updatewindow()程序也是正常啊,说明invalidateRect()也是发送了WM_PAINT消息让窗口重回了,这到底是怎么回事??谢谢大家,============不用也可以的。InvalidateRect是作用是置无效区,系统检测到存在无效区时会发送WM_PAINT消息。而UpdateWindow则是立即强制发送WM_PAINT消息。简单地说,InvalidateRect调用之后不会立即发送WM_PAINT消息,而是存在一个系统检测的时间差,而UpdateWindow则是立即发送。 好像不对吧,很多资料上说的是invalidateRect都会发送wm_paint消息 资料上只会说 invalidaterect 会导致系统发送 WM_PAINT, 绝对不会说 invalidaterect 会发送 WM_PAINT. 请你看资料时仔细一些。 请问管道调用卡巴杀毒获取输出的问题 像网络电视一样可以使视区精简模式 在线等待:MFC多文档打印问题 vc中怎么自动调书写格式 不记得快捷键了 @@ 对面的高手看过来 --- 如何使用XMLHTTPRequest以异步方式实现文件的下载?? 我买到喉结的《Win32多线程程序设计》了!!! 双缓冲颜色丢失了。。。。。 如何换行显示文本 关于opencv mfc打开摄像头的问题 哪位大神安装过WDK自带的bitmap.dll 求指导 exe退出时弹出这个,是不是线程的问题?? 请问高手们,如何将Cstring类型的变量内容赋值给char型数组?特别着急!!!谢谢大家了!!!
当存在窗口的更新区域时,系统发送WM_PAINT重绘窗口指定的”更新区域“
如果当前不存在窗口的需要更新区域,则系统不发送WM_PAINT消息,不过系统提供手工发送WM_PAINT系统的函数UpdateWindow。
InvalidateRect 函数把参数RECT 指定的无效区域加入到窗口的需要“更新区域”中去,但并不会发送WM_PAINT消息,但系统会按一定的规则检测窗口的“更新区域”,如果存在“更新区域”,则也会发送WM_PAINT消息自动重绘窗口的“需要更新区域”,这就是“我没有调用updatewindow()程序也是正常啊”的原因
毕竟运行完函数InvalidateRect不发送WM_PAINT系统,所以不依赖系统的特性在执行完InvalidateRect函数后 再执行updatewindow()函数是个好习惯。
在一个时刻只有一个WM_PAINT消息在系统消息队列中,很多不同的无效区域会“累积”一块,放在一个WM_PAINT中,和其他消息不同,如鼠标消息等,他们是连续发送。
程序也是正常啊,说明invalidateRect()也是发送了WM_PAINT消息让窗口重回了,
这到底是怎么回事??谢谢大家,
============
不用也可以的。
InvalidateRect是作用是置无效区,系统检测到存在无效区时会发送WM_PAINT消息。而UpdateWindow则是立即强制发送WM_PAINT消息。简单地说,InvalidateRect调用之后不会立即发送WM_PAINT消息,而是存在一个系统检测的时间差,而UpdateWindow则是立即发送。
资料上只会说 invalidaterect 会导致系统发送 WM_PAINT, 绝对不会说 invalidaterect 会发送 WM_PAINT. 请你看资料时仔细一些。