SetTimer(1,5000,NULL);设置定时器
提示的错误
error C2501: 'SetTimer' : missing storage-class or type specifiers
error C2373: 'SetTimer' : redefinition; different type modifiers这是我写的函数
void CXmDlg::OnTimer(UINT_PTR nIDEvent)之后我在按钮中直接调用该函数并传参 为什么会出错呢?
void CXmDlg::OnButton2() 
{
OnTimer(1);
}
错误提示:
error C2668: 'OnTimer' : ambiguous call to overloaded function请问各位高手如何解决  万分感谢!

解决方案 »

  1.   

    .h
    void OnTimer(UINT nIDEvent);.cpp
    BEGIN_MESSAGE_MAP(CXXXXXXDlg, CDialog)
    ON_WM_TIMER()
    END_MESSAGE_MAP()void CXmDlg::OnButton2() 
    {
    SetTimer(1,5000,NULL);
    }
    //KillTimer(1);在要停止的地方执行
      

  2.   

    SetTimer(1,5000,NULL);//最后一个参数是定时器消息处理函数,如果为空则使用默认函数;
    afx_msg void OnTimer( UINT nIDEvent );//默认的定时器处理函数,此时需要添加ON_WM_TIMER()宏,并且此时OnTimer不用你自己调用;
    另外,全局的SetTimer函数有4个参数,第一个参数是窗口句柄,第二个是唯一的定时器id。
    就解释这么多吧
      

  3.   

    我把按钮的改成
    void CXmDlg::OnButton2() 
     {
       SetTimer(1,5000,NULL);
     }
    使用类向导的方法添加了消息响应函数了 怎么没还是不执行呢?
      

  4.   

    楼主改了之后需要在OnTimer(UINT nIDEvent){}中写你自己想做的事情
    void OnTimer(UINT nIDEvent)
    {
       "处理你的事情!";
    }
      

  5.   

    我当然写了函数功能了啊!而且我在OnTimer中也加入了MessageBox(“sdfsdf”);结果也没输出啊!
      

  6.   

    按照你的发方法 没有任何错误!
    BEGIN_MESSAGE_MAP(CTimertest2Dlg, CDialog)
    //{{AFX_MSG_MAP(CTimertest2Dlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    ON_WM_TIMER() //}}AFX_MSG_MAP
    END_MESSAGE_MAP() //{{AFX_MSG(CTimertest2Dlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnButton1();
    afx_msg void OnTimer(UINT nIDEvent); //}}
    AFX_MSGvoid CTimertest2Dlg::OnButton1() 
    {
    OnTimer(1);
    }void CTimertest2Dlg::OnTimer(UINT nIDEvent) 
    {
    MessageBox(_T("sdfsdf"));

    CDialog::OnTimer(nIDEvent);
    }
      

  7.   

    有没有弹出messagebox对话框?
    你是意思是弹出messagebox对话框了但是上面没输出,还是连messagebox对话框都没单出来?
      

  8.   

    void CTimertest2Dlg::OnTimer(UINT nIDEvent) 
    {
    switch(nIDEvent)
    {
    case 1: //定时器1
    {
                      //做你的事
                     }
    break;
    }void CXmDlg::OnButton2() 
     {
       SetTimer(1,1000,NULL);
     }
    把5000改为1000,,设置成1秒,也许是你5秒时间太长了,你没等到5秒就关了。
      

  9.   

    SetTimer重定义?楼主检查下头文件吧。
      

  10.   

    你的消息映射加的对吗?
    ON_WM_TIMER()
      

  11.   

    消息映射添加了 是MessageBox 对话框都没弹出来
      

  12.   


    这是.cpp文件
    BEGIN_MESSAGE_MAP(CXmDlg, CDialog)
    //{{AFX_MSG_MAP(CXmDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    ON_COMMAND(ID_KS, OnKs)
    ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
    ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
    ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
    ON_WM_TIMER()
            ON_MESSAGE(WM_SHOWTASK,onShowTask)
    ON_WM_CANCELMODE()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()这是.h文件
    // Generated message map functions
    //{{AFX_MSG(CXmDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    virtual void OnOK();
    afx_msg void OnButton1();
    afx_msg void OnKs();
    afx_msg void OnButton2();
    afx_msg void OnButton4();
    afx_msg void OnButton3();
    afx_msg void OnTimer(UINT nIDEvent);
    afx_msg void OnCancelMode();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };
    这两个地方有什么不对的地面吗? 纠结了好长时间了!谢谢了!
      

  13.   

    新手老老实实用wizard,等熟练了再手动添加消息响应。
      

  14.   

    新手老老实实用wizard定义窗口的timer事件,等熟练了再手动添加消息响应。 
      

  15.   

    定时器Timer就不应该这样用!一个很简单的问题搞这么麻烦!你的OnButton2()函数只管启动或者杀死定时器,至于定时时间到了之后的事件处理程序由MFC自动调用“void 你的类名::OnTimer(UINT_PTR nIDEvent)“函数,在这个函数里面编写你的处理代码。
    断点调试下,看看能否进入到OnTimer(UINT_PTR nIDEvent){.......}里面就行了,没碰到过不行的时候。