然后看OnTimer函数中,
m_nzValues[POINT_COUNT-1] = rand() % 80
新生成的波形数据是添加在了数组的末尾,即数组的“右侧”,也即图像的右侧,而其余数组则顺次“左移”( for (int i=0i<POINT_COUNT-1i++) {...})。在程序刚刚开始运行的时候,波形数据为空,而最先在末尾(“右侧”)出现数据,因此在DrawWave()函数里,虽然是从左往右画,但画的数据内容则是从右往左的。换句话说,绘图的方向 与 数据变化的方向是无关的,我也完全可以把绘图方向变成从右向左,效果完全不会变;而不论我绘图方向如何,如果我把数据变化方向改成从左向有(如在 m_nzValues[0]插入随机数,其余数据顺次右移),画出来的动画一定是从左向右的。
===
每次DrawWave,确实都会填充背景抹掉之前的绘图,接下来的for(...)则是把波形从头到尾地再画一遍——这个叫做”波形的一帧“,反复的DrawWave呈现的所有”帧“连贯起来就是你所看见的波形动画。
===
总之,DrawWave函数本身的功能仅仅是把m_nzValues数组的所有数值呈现在屏幕上,而使这波形图像动起来的,并不是DrawWave函数,而是OnTimer里不断对m_nzValues进行的有规律的 *** 作(不断插入数据并移动数据)
新建一个SDI或MDI类型的MFC程序,然后在重绘函数里反复调用pDC->MoveTo, pDC->LineTo,用一组首尾相接的短线段表示离散化的波形,步长越小,曲线越光滑。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)