void CRunCutDlg::OnTimer(UINT nIDEvent) 
{
KillTimer(2);
CDialog::OnTimer(nIDEvent);
}Windows下的编辑是基于消息你,你是不是在DOS下编程的,你对消息理解不够,但我一时半会儿也说不清楚,你就暂时这样用吧。

解决方案 »

  1.   

    OnTimer通过Class Wizard添加,直接添加不行,除非你把消息映射也添加。
      

  2.   

    我想实现的功能是:
    在单击按钮后,设置定时器,这时候触发 OnTimer()事件,运行1秒后把定时器关闭,不知道怎么实现
      

  3.   

    Sleep是让整个程序暂停运行,它并不能完成你所说的“运行1秒后把定时器关闭”的效果,因为当CPU执行到你的程序中的Sleep()时,你的程序就会释放出CPU的占有权,直到Sleep的时间完成为止。你还是没有理解一楼的意思,你的定时器关闭函数KillTimer不应该放在按钮的消息函数中,这个函数应该放在定时器的处理函数OnTimer中。不然你刚定下的定时器,接着就会被关闭了!
      

  4.   

    这样应该可以
    void CRunCutDlg::OnBtnRunGopre() 
    {
    SetTimer(2,m_nTimerInterval,NULL);
    }void CRunCutDlg::OnTimer(UINT nIDEvent) 
    {
    static DWORD time=GetTickCount();
    if(GetTickCount()-time>=1000) KillTimer(2);
    CDialog::OnTimer(nIDEvent);
    }
      

  5.   

    楼上说的对,可是我如果把KillTimer放在OnTimer里,我怎么才能知道从SetTimer 到 KillTimer经过了1秒时间呢
      

  6.   

    OnTimer里不是用个nIDEvent参数里,当它等于你的定时器ID,即2的时候,就经过m_nTimerInterval毫秒了,即你所说的1000毫秒(1秒),当然误差肯定是有的,这就不是你的问题了。