有关定时器的..

tiezhen2000 2010-05-15 09:10:00
关于定时器又出现了二个问题:
1.一个父对话框,分别点击2个按钮产生2个新的子对话框(非模式对话框)。我在2个对框上都用了定时器
//子对话框1
void CDialog1::OnButton1() //计时按钮
{
SetTimer(1,1000,NULL);

}

CDialog1::OnTimer(UINT nIDEvent)
{
SetTimer(1,1000,NULL);

CString str1;
str1.Format(_T("%d·Ö%dÃë"),m_d1timefen,m_d1timemiao); //在静态文本中显示
SetDlgItemText(IDC_STATIC1,str1);

CDialog::OnTimer(nIDEvent);
}
void CDialog1::OnButton2() //停止按钮
{
KillTimer(1);
}
//子对话框2
void CDialog2::OnButton1() //计时按钮
{
SetTimer(2,1000,NULL);

}

CDialog2::OnTimer(UINT nIDEvent)
{
SetTimer(2,1000,NULL);

CString str1;
str1.Format(_T("%d·Ö%dÃë"),m_d1timefen,m_d1timemiao);
SetDlgItemText(IDC_STATIC1,str1);

CDialog::OnTimer(nIDEvent);
}
void CDialog2::OnButton2() //停止按钮
{
KillTimer(2);
}

运行时把2个对话框都打开,点击其中任一个计时按钮,2个对话框中的定时器都开始定时,怎么回事?
然后点击其中任一个停止按钮,2个对话框中的定时器都停止计时?
麻烦大家讲解一下,我感觉程序没有错误啊,编译也能通过,不知道是哪出错了?
是不是使用定时器时要注意哪些?













...全文
106 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiezhen2000 2010-05-15
  • 打赏
  • 举报
回复
修改:
假设我关闭子对话框1一次,然后我重新打开子对话框1,计时器显示的不是每秒加一次,而是2秒加一次。然后我关闭几次子对话框,定时器显示就是每几秒加一次。例如,我关闭了5次新界面,然后重新打开新界面时,编辑框里显示的是每秒加6次。
tiezhen2000 2010-05-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 happyparrot 的回复:]
CDialog1::OnTimer(UINT nIDEvent)
{
SetTimer(1,1000,NULL);

CString str1;
str1.Format(_T("%d·Ö%dÃë"),m_d1timefen,m_d1timemiao); //在静态文本中显示
SetDlgItemText(IDC_STATIC1,str1);

CDialog::……
[/Quote]

是的,应该不用写这个了SetTimer();真实多余的。。
感谢!!
tiezhen2000 2010-05-15
  • 打赏
  • 举报
回复
2.假设我关闭子对话框1一次,然后我重新打开子对话框1,计时器显示的不是每秒加一次,而是2秒加一次。然后我关闭几次子对话框,定时器显示就是每几秒加一次。例如,我关闭了5次新界面,然后重新打开新界面时,编辑框里显示的是每5秒加一次。
void CDialog1::OnTimer(UINT nIDEvent)
{
m_d1timemiao++;
CString str1;
str1.Format(_T("%d·Ö%dÃë"),m_d1timefen,m_d1timemiao);
SetDlgItemText(IDC_STATIC1,str1);
CDialog::OnTimer(nIDEvent);
}
void CDialog1::OnButton1()
{
SetTimer(1,1000,NULL);
}
void CDialog1::OnButton2()
{
KillTimer(1);
}
BloodFighter 2010-05-15
  • 打赏
  • 举报
回复
上边的都说清楚了
1.OnTimer里面的SetTimer(1,1000,NULL)这句话纯粹是添乱的,导致什么不清楚
2.最好在OnTimer里面if (nIdEvent == 1){这里添加处理}
快乐鹦鹉 2010-05-15
  • 打赏
  • 举报
回复
CDialog1::OnTimer(UINT nIDEvent)
{
SetTimer(1,1000,NULL);

CString str1;
str1.Format(_T("%d·Ö%dÃë"),m_d1timefen,m_d1timemiao); //在静态文本中显示
SetDlgItemText(IDC_STATIC1,str1);

CDialog::OnTimer(nIDEvent);
}
===
这里的SetTimer(1,1000,NULL);根本就不需要。
洗洗睡去 2010-05-15
  • 打赏
  • 举报
回复
CDialog2::OnTimer(UINT nIDEvent)
{
SetTimer(2,1000,NULL);
这样每次定时事件到 都会开2号定时器 肯定有问题吧 加入判断吧
if(nIDEvent==1)
{
.....
}
tiezhen2000 2010-05-15
  • 打赏
  • 举报
回复
我是定义了2个基于CDialog的类CDialog1 和CDialog2,然后分别在CDialog1 和CDialog2中写的程序。
tiezhen2000 2010-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyparrot 的回复:]
这是你写的伪代码么?
[/Quote]
这就是可以编译的程序啊,有哪不对的吗?
cqlppolice 2010-05-15
  • 打赏
  • 举报
回复
好好好........
快乐鹦鹉 2010-05-15
  • 打赏
  • 举报
回复
这是你写的伪代码么?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧