VC定时器的有关问题 初学者

VC定时器的问题 菜鸟求助
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

请问各位高手如何解决  万分感谢!
------最佳解决方案--------------------
.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);在要停止的地方执行

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

正解,你添加消息响应函数就行了,不用自己添加那些宏和声明、定义;只用加上实现代码就好
------其他解决方案--------------------
按照你的发方法 没有任何错误!
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_MSG

void CTimertest2Dlg::OnButton1() 
{
OnTimer(1);


}

void CTimertest2Dlg::OnTimer(UINT nIDEvent) 
{
MessageBox(_T("sdfsdf"));

CDialog::OnTimer(nIDEvent);
}






------其他解决方案--------------------
void CTimertest2Dlg::OnTimer(UINT nIDEvent) 
{
switch(nIDEvent)
{
case 1: //定时器1
{
                  //做你的事
                 }
break;
}

void CXmDlg::OnButton2() 
 {
   SetTimer(1,1000,NULL);
 }
把5000改为1000,,设置成1秒,也许是你5秒时间太长了,你没等到5秒就关了。
------其他解决方案--------------------
SetTimer重定义?

楼主检查下头文件吧。
------其他解决方案--------------------
引用:
我把按钮的改成
void CXmDlg::OnButton2() 
 {
   SetTimer(1,5000,NULL);
 }
使用类向导的方法添加了消息响应函数了 怎么没还是不执行呢?