在vc++中 OnDraw()函数和 Invalidate()函数起啥作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在vc++中 OnDraw()函数和 Invalidate()函数起啥作用相关的知识,希望对你有一定的参考价值。
OnDraw()函数每当窗口发生重绘时就会执行,它其实跟消息处理函数OnPaint()差不多。当在View类里添加了消息处理函数OnPaint()时,OnPaint()就会覆盖掉OnDraw()。Invalidate()是使视图类窗口无效的函数,当要刷新视图时,就可以掉用它,以便发送一个WM_PAINT消息引起窗口的重绘。它有一个默认的参数TRUE,即Invalidate(TRUE)。 参考技术A 可以这样理解Invalidate(TRUE)函数可以调用OnDraw ()函数;
所以当画图参数改变,你又想更新视图时,就可以使用Invalidate(TRUE)了。
有个前提,必须是绘图命令在OnDraw ()中直接或间接完成的。因为我们可以在很多其他函数中创建DC以实现画图 参考技术B vc++?是mfc吧?
看函数名应该是事件响应函数。就是说,你把你自己写的函数注册给这个函数,它会在该事件发生的时候调用你注册的函数 参考技术C OnDraw 负责画,如果要在设备对象上画东西,在这个函数里面。
Invalidate是通知视图重新绘制,也就是调用OnDraw 参考技术D Invalidate会产生一个WM_PAINT消息
WM_PAINT消息会调用OnDraw函数
VC++调试的基本快捷键
VS2012新建一个单文档工程;在视类CPP文件尾部添加一个sum()函数;
int sum()
int i, sum=0;
for(i=1; i<=100; i++)
sum+=i;
return sum;
在视类CPP文件头部添加sum()函数声明;在OnDraw()函数写如下代码;在如下图语句设置断点;
启动调试;停留到如下图;
按F11,这是逐语句调试,然后会进入sum()函数,
按F11会一直在此函数内部,
跳出函数按Shift+F11,返回到下图;
结束此次运行;重新启动调试,停留到 s1 = sum(); 这一句时,按F10,这是逐过程调试,不会进入sum()函数内,直接进到下一句;
F11 - 逐语句,F10 - 逐过程,Shift+F11 - 从函数中跳出;
以上是关于在vc++中 OnDraw()函数和 Invalidate()函数起啥作用的主要内容,如果未能解决你的问题,请参考以下文章
MFC中ONPAINT、ONDRAW、ONERASEBKGND等绘图函数的使用场合和作用、区别是啥啊?