我建立一单文档程序,基类是CFormView,在view中添加了一定时器,现有两个问题:
1。希望实现一按按钮,文本编辑框里的数据就按定时器的时间更新,我在C***View::OnTimer()函数中实现程序逻辑,
{
......
val+=10*rand();
m_Edit=val;
UpdateData(FALSE);
}
按钮中
{
SetTmer(1,100,0);
}
可是我执行程序后,还未等我按按钮,编辑框的变量已按照我随机函数的值,自动变化了,我按按钮后,就会继续按照定时器时间更新变化,请问怎么回事?如何实现我的功能,奇怪!
2。我想在view中实现多个定时器,当然timer中的程序逻辑是不一样的,可是MFC只允许添加一个ontimer()函数,提示我函数体已存在??、如何解决!!
在线等啊,解决即派分!!!!!!!!!!!!!!!!11
1。希望实现一按按钮,文本编辑框里的数据就按定时器的时间更新,我在C***View::OnTimer()函数中实现程序逻辑,
{
......
val+=10*rand();
m_Edit=val;
UpdateData(FALSE);
}
按钮中
{
SetTmer(1,100,0);
}
可是我执行程序后,还未等我按按钮,编辑框的变量已按照我随机函数的值,自动变化了,我按按钮后,就会继续按照定时器时间更新变化,请问怎么回事?如何实现我的功能,奇怪!
2。我想在view中实现多个定时器,当然timer中的程序逻辑是不一样的,可是MFC只允许添加一个ontimer()函数,提示我函数体已存在??、如何解决!!
在线等啊,解决即派分!!!!!!!!!!!!!!!!11
解决方案 »
- 帮我看看这是用的什么原理?
- ADO连接数据库在别的机子上可以到家就说SA登录失败我修改了连接字串!!
- 关于打印的问题
- 使用C++怎样在powerpoint中增加一个菜单项或者toolbutton
- 新手问题,帮忙!!!
- 关于深入浅出MFC中第三章FRAME1程序的问题,在线等待
- 如何贴底图并在底图上绘制可单击的图形以链接消息?
- 服务器端(CAsyncSocket)在客户端非正常断开时,如何判断客户端一断开?
- vc中如何将字符串变成大写?
- 我用ClearCommError函数从COM1读数据有问题
- 关于在我的单文档界面菜单上调用一个用dll做成的对话框出错的问题?
- 一个C++风格的静态LIB库,我该如何在C里调用?
if(nIDEvent == 1)
{
...
}
2.#define MYTIME1 WM_USER+100
#define MYTIME2 WM_USER+101
....
za
SetTimer(nID1,1000,NULL);
SetTimer(nID2,1000,NULL);
...
OnTimer()
{
switch(nIDEvent)
{
case nID1:
...
break;
case nID2:
...
break;
default:
break;
}
}
对于第一个问题,比较奇怪。不如在OnTimer中先判断参数为1再做操作吧。
switch(nIDEvent)
{
case MYTIMER1:
...
case MYTIMER2:
...
动了。
2你可以在ontimer中使用case来区分各个不同的timer,当然每个timer的id和时间间隔
要不同。
例如:SetTimer(1, 100, 0);
SetTimer(2, 1000, 0);OnTimer里面OnTimer(UINT nIDEvent)
{
Switch (nIDEvent)
{
case 1:
//do something...
break;
case 2:
//do ...
break;
}
}
分析一下,你是否只创建一个定时器,
也就是说在按按钮之前,是否有别的定时器创建了
如果没有以上的情况出现,那么你说的第一个问题就不可以出现。第二个问题的解决有可能解决你的第一个问题说明一个SetTimer的三个参数,
第一个参数是定时器的标志号,用于区别是哪个定时器发出的信号
第二个参数是时间间隔
第三个参数是指定此定时器处理的函数
如果第三个参数你设为NULL,也就是0
那么你要在OnTimer()函数里区别定时器
如下面的举例,我在button1中创建了两个定时器
void CDeletezsfssssDlg::OnButton1()
{
SetTimer(1000, 1000, NULL);
SetTimer(1001, 5000, NULL);
}
然后在下面响应
void CDeletezsfssssDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
case 1000:
{
static i;
i++;
m_i=i;
UpdateData(FALSE);
break;
}
case 1001:
{
MessageBox("1001");
break;
}
default:
{
break;
}
}
CDialog::OnTimer(nIDEvent);
}