void CBandDlg::OnBtnShow()
{
SetTimer(1,1000,NULL);
}在OnTimer中 
void   CBandDlg::OnTimer(UINT   nIDEvent)   
  {       //未调用!!!!!!!!!   
          if(nIDEvent==1)   
          {   
             AfxMessageBox("success");
          }   
  } 说明:基于对话框的应用程序,而且在该程序中有两个对话框,CBandDlg是主对话框!
      OnTimer函数是通过向导添加的
执行程序,1秒后对话框消失,请问为什么不响应OnTimer函数呢?搞不明白

解决方案 »

  1.   

    SetTimer(1,1000,NULL); 
    放InitialDialog中试试.
      

  2.   

    是程序退出了
    就是程序没有捕获WM_TIMER消息,就直接退出了
    试了试放InitialDialog中,还是不行
      

  3.   

    re jingtan:不加这个定时器,程序能正常运行
      

  4.   

    WM_TIMER消息的优先级比较低,当消息缓冲区里没有其他的消息时,应用程序才会处理该消息,当消息队列里等待处理的消息比较多的时候,WM_TIMER就好像始终无法处理! 你的OnPaint有操作么?
      

  5.   

    除了OnTimer你还有哪些处理?   把OnTimer和OnInitDialog的代码都贴出来看看
      

  6.   

    加上默认对话框消息处理函数试试看
    按理不应该有什么问题
    void  CBandDlg::OnTimer(UINT  nIDEvent)  
    {
      if(nIDEvent==1)  
      {  
        //AfxMessageBox("success"); 
        Beep(1000,100);
      }
      CDialog::OnTimer(nIDEvent);
    }
      

  7.   

    OnPaint没有任何操作
    BOOL CBandDlg::OnInitDialog() 

    CDialog::OnInitDialog(); // Add "About..." menu item to system menu. ....... InitSocket(); 
    RECVPARAM *pRecvParam=new RECVPARAM; 
    pRecvParam->sock=m_socket; 
    pRecvParam->hwnd=m_hWnd; 
    HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL); 
    CloseHandle(hThread); return TRUE;  // return TRUE  unless you set the focus to a control 
    } OnTimer函数:
    void  CBandDlg::OnTimer(UINT  nIDEvent)  
      {      //未调用!!!!!!!!!  
              if(nIDEvent==1)  
              {  
                AfxMessageBox("success"); 
              }  
      } 
      

  8.   

    可能:
    HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL); 
    CloseHandle(hThread); 
    已经异常.
      

  9.   

    void  CBandDlg::OnTimer(UINT  nIDEvent)  
      {      //未调用!!!!!!!!!  
              if(nIDEvent==1)  
              { 
    KillTimer(1);
                AfxMessageBox("success"); 
    SetTimer(1,1000,NULL)
              }  
      } 
      

  10.   

    在OnTimer函数里怎么操作都没有反应,因为程序根本就没有调用这个函数,没有执行它就退出了!!
    到底什么原因啊,求高手帮帮忙
      

  11.   

    你把定时器时间间隔改短点试试看呢,是不是程序推出得更快了;
    説不定就执行了ontimer
      

  12.   

    "2个对话框,1秒后对话框消失";是不是有2个OnTomer()? 1秒后其中一个已经响应?
      

  13.   

    执行完SetTimer后就退出程序了,本应该进入OnTimer执行的,实际上没有而是直接退出程序了
      

  14.   

    BOOL CBandDlg::OnInitDialog() 

    CDialog::OnInitDialog(); // Add "About..." menu item to system menu. ....... InitSocket(); 
    RECVPARAM *pRecvParam=new RECVPARAM; 
    pRecvParam->sock=m_socket; 
    pRecvParam->hwnd=m_hWnd; 
    HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL); return TRUE;  // return TRUE  unless you set the focus to a control 
    } void CbandDlg::OnBtnShow()
    {
      SetTimer(1,1000,NULL);
    }OnTimer函数: 
    void  CBandDlg::OnTimer(UINT  nIDEvent)  
      {      //未调用!!!!!!!!!  
              if(nIDEvent==1)  
              {  
                AfxMessageBox("success"); 
              }  
      } 
      

  15.   

    UINT SetTimer(
      HWND hWnd,              // handle of window for timer messages
      UINT nIDEvent,          // timer identifier
      UINT uElapse,           // time-out value
      TIMERPROC lpTimerFunc   // address of timer procedure
    );
    用完整的形式看看,指定hwnd.
      

  16.   

    照楼上说的试了试,还是不行!
    一般是什么情况可能干扰OnTimer执行啊
    不加定时器,程序能正常运行,加上就好使了!!
      

  17.   

    查查代码里面是不是有一个OnOK();
    把它去掉就好了。
      

  18.   

    问题找到了
    原来是我加载了VC皮肤的原因!
    加载皮肤后不能响应OnTimer消息了,不知道怎么能解决这个问题
    创建自己的消息处理函数不知道能不能解决,试试去
      

  19.   

    你断电进入各种OnTimer 喝 OnPaint 能进去吗 建议你看下windows的消息机制?
      

  20.   

    解决了
    自己定义定时器回调函数,把该回调函数定义为static类型就可以使用了
    在别的贴子里学的
    大家共同学习,共同进步吧!!再次谢谢大家!