在vc++中 OnDraw()函数和 Invalidate()函数起什么作用

如题所述

OnDraw()函数每当窗口发生重绘时就会执行,它其实跟消息处理函数OnPaint()差不多。当在View类里添加了消息处理函数OnPaint()时,OnPaint()就会覆盖掉OnDraw()。Invalidate()是使视图类窗口无效的函数,当要刷新视图时,就可以掉用它,以便发送一个WM_PAINT消息引起窗口的重绘。它有一个默认的参数TRUE,即Invalidate(TRUE)。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-06-05
可以这样理解
Invalidate(TRUE)函数可以调用OnDraw ()函数;

所以当画图参数改变,你又想更新视图时,就可以使用Invalidate(TRUE)了。
有个前提,必须是绘图命令在OnDraw ()中直接或间接完成的。因为我们可以在很多其他函数中创建DC以实现画图
第2个回答  2008-06-05
vc++?是mfc吧?
看函数名应该是事件响应函数。就是说,你把你自己写的函数注册给这个函数,它会在该事件发生的时候调用你注册的函数
第3个回答  2008-06-05
OnDraw 负责画,如果要在设备对象上画东西,在这个函数里面。

Invalidate是通知视图重新绘制,也就是调用OnDraw
第4个回答  2008-06-07
Invalidate会产生一个WM_PAINT消息
WM_PAINT消息会调用OnDraw函数

在vc++中 OnDraw()函数和 Invalidate()函数起什么作用
OnDraw()函数每当窗口发生重绘时就会执行,它其实跟消息处理函数OnPaint()差不多。当在View类里添加了消息处理函数OnPaint()时,OnPaint()就会覆盖掉OnDraw()。Invalidate()是使视图类窗口无效的函数,当要刷新视图时,就可以掉用它,以便发送一个WM_PAINT消息引起窗口的重绘。它有一个默认的参数TRUE...

vc中的Invalidate()有什么作用?
当你的窗口需要重画时,你需要用Invalidate()来使窗口无效,然后会调用OnDraw()就会重画该窗口

MFC中的Invalidate、OnDraw、OnPaint函数的作用、区别和联系是什么?
void Invalidate( BOOL bErase = TRUE );该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理...

onDraw调用和android中Invalidate和postInvalidate的区别
Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中...

Invalidate()的作用是什么
作用:使整个窗口客户区无效,此时就需要重绘,这个就会自动调用窗口类的OnPaint函数,OnPaint负责重绘窗口。Java的工作原理由四方面组成:1、Java编程语言 2、Java类文件格式 3、Java虚拟机 4、Java应用程序接口

invalidate()执行后,为什么onDraw()却不执行
1、OnDraw函数在程序启动和任何界面刷新情况下都会调用,你点一下菜单或者鼠标通过客户区,就会造成无数个弹出窗口。2、如果程序运行中一个弹出也没有,那么两种情况:一个是OnDraw不是系统提供的重载函数,你写错了,另外一个是你的View不是标准CView继承类,比如CFormView继承,那么OnDraw是无效的,调用...

VC++如何在图形窗口删除文字
1·最常用的,就是OnDraw(OnPaint)重画,不再写文字就可以了,效率高的话,在触发的地方使用Invalidate(&Rect),局部更新。2·异或刷子(画笔)重写。前提是第一次写就是异或方式,那么第二次写就将文字去掉了。3·底色覆盖。使用底色刷子在文字的坐标上面画一个Rectangle,也可以盖住文字。当然,...

InvalidateInvalidate介绍
MFC为窗口类预先定义了处理WM_PAINT消息的函数OnPaint,这个函数的主要职责是重新绘制窗口的客户区。然而,对于视图类,情况有所不同。在视图类的OnPaint函数内部,会调用OnDraw函数,实际上是由OnDraw函数来完成具体的重绘工作。当调用Invalidate函数时,参数bErase决定了重绘行为:如果设置为TRUE,那么重绘...

VC 用鼠标画直线的程序,我已经定义了函数,写了如下程序,请问我想以单 ...
CView::OnLButtonDown(nFlags, point);} void CMidView::OnRButtonUp(UINT nFlags, CPoint point){ \/\/ TODO: Add your message handler code here and\/or call default m_ptEnd = point;Invalidate(); \/\/此函数用来刷新视图,其实就是调用OnDraw函数 CView::OnRButtonUp(nFlags, point);...

VC++中"用刷子删除客户区背景"什么意思?
这里的删除应该是“擦除”的意思,怎么擦呢?当然不是用擦皮擦了。Windows会调用OnEraseBkgnd这个函数来擦除背景,如此,你将有时间在绘制前景之前,在此重绘背景。而前景就在众所周之的OnPaint()函数中绘制。补充1:你说的很对,是这个意思,所谓无效,就是告诉Windows这块区域允许重绘,但之前这里有...

相似回答