前段时间因为做图像处理的综合实验,需要用到MFC编写调试程序,要做到能够实时采集图像然后立刻处理图像,所以用到了MFC中的定时器。关于定时器MFC的CWnd类提供的成员函数SetTimer实现定时器功能,而Windows API函数SetTimer来实现。两者使用方法实际上很类似,但也有不同。 CWnd类的SetTimer成员函数只能在CWnd类或其派生类中调用,而API函数SetTimer则没有这个限制。
下面主要说一下基于MFC的定时器的三个设置步骤:
在此之前 先请看SetTimer这个API函数的原型:
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT uElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
例如:
SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了
1.用WM_TIMER来设置定时器
右键点击MFC界面的属性找到右边的消息里面设置OnTimer然后再转到代码界面:
因为我只需要一个定时器,所以我就只有一个case1,如果你需要多个定时器,多几个case就可以了。设置完这个,下面是启动定时器
2.启动定时器
就是把SetTimer(1, 1000, NULL); 函数放到你点击的按钮下面就可以,即你点击处理按钮定时器就会开始执行。比如我放在开始处理按钮下面:
定时器只有那一行一个函数就可以了,下面那个处理函数是我处理图片的函数,可自行忽略。这样启动过后程序在运行时定时器也会一直运行。然后就需要加一个人工的停止按钮,你可以加一个停止定时器的按钮,像我设置了一个停止按钮。也只需一行代码即可。
3.停止定时器
我做的图像处理综合实验是通过摄像头实时检测试验台豌豆绿豆两种豆子的数量变化并计数,可以人为实时加减绿豆豌豆进试验台程序能够实时进行分类计数。有兴趣试试可以下一下完整代码跑一下。完整代码在我的GitHub上。附上链接:https://github.com/sqd918/demo1