2 qq 21089415 qq_21089415 于 2015.07.19 22:57 提问

如图,在一个对话框中如果要用到多个ontimer应该怎么办,是不是用case,该怎么用

图片说明
借用了某位大神的仪表控件,如果我要再加一个仪表,那么ontimer就重叠,该怎么解决,谢谢了

2个回答

putaoaa
putaoaa   2015.07.21 09:46
已采纳

SetTimer函数的原型
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT nElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);

在调用SetTimer的时候有个参数 nIDEvent,通过在ontimer中判断nIDEvent来区分不同定时器:

switch(nIDEvent)
{
case 0:
{
}
...
}

putaoaa
putaoaa 回复chanvcvcvc: 比如说你想在你的MFC对话框中的OnInitDialog中添加两个定时器,第一个每隔1秒执行一次,一个每隔2秒执行一次,则在OnInitDialog中添加如下代码: SetTimer(100, 1000, NULL);//定时器ID为100,每隔1000毫秒执行一次 SetTimer(101, 2000, NULL);//定时器ID为101,每隔2000毫秒执行一次 然后在ontimer中如下写: void CMyMeterDlg:OnTimer(UINT nIDEvent) { switch(nIDEvent) { case 100: { //执行定时器ID 100 需要执行的代码 break; } case 101: { //执行定时器ID 101 需要执行的代码 break; } defalut: break; } }
2 年多之前 回复
qq_21089415
qq_21089415 我上面那个例子可以具体点该怎么改吗
2 年多之前 回复
devmiao
devmiao   Ds   Rxr 2015.07.19 23:40

不是有nidevent么,不同的timer有不同的id
当然也可以只用一个定时器,只要定时器的间隔取你所有定时器的最大公约数就可以了。(比如你的timer1为6秒,timer2为4秒,那么你完全可以用一个2秒的定时器配合两个累加变量来做不同的操作)

qq_21089415
qq_21089415 可以具体点吗,不是很懂。。。新手
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片