MFC C++ Timer不响应的问题
请高手看一下我的程序BOOLCVCMIDlg::OnInitDialog()//对话框的初始程序{//前面还有些其它codem_OutputTimer=SetTimer(...
请高手看一下我的程序
BOOL CVCMIDlg::OnInitDialog() //对话框的初始程序
{
//前面还有些其它code
m_OutputTimer = SetTimer(1, 1000,0); //m_OutputTimer前面已定义
}
void CVCMIDlg::OnTimer (UINT_PTR nIDEvent)
{
if(nIDEvent == 1)
{
AfxMessageBox("On Timer");
}
}
我看了网上的资料,觉得没有问题,但那个messagebox就是不出来。
初学者,请大家帮忙,谢谢。
谢谢大家的关注,我用的编成工具是 vs2005,ontimer函数已经在头文件里定义了,整个程序可成功编译。问题就是运行时 ontimer函数里的messagebox不出来。 展开
BOOL CVCMIDlg::OnInitDialog() //对话框的初始程序
{
//前面还有些其它code
m_OutputTimer = SetTimer(1, 1000,0); //m_OutputTimer前面已定义
}
void CVCMIDlg::OnTimer (UINT_PTR nIDEvent)
{
if(nIDEvent == 1)
{
AfxMessageBox("On Timer");
}
}
我看了网上的资料,觉得没有问题,但那个messagebox就是不出来。
初学者,请大家帮忙,谢谢。
谢谢大家的关注,我用的编成工具是 vs2005,ontimer函数已经在头文件里定义了,整个程序可成功编译。问题就是运行时 ontimer函数里的messagebox不出来。 展开
4个回答
展开全部
CWnd::SetTimer
UINT SetTimer(UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT*lpfnTimer) (HWND, UINT, UINT, DWORD) );
返回值:
如果函数成功,则返回新定时器的标识符。应用程序可以将这个值传递给KillTimer成员函数以销毁定时器。如果成功,则返回非零值;否则返回0。
参数: nIDEvent 指定了不为零的定时器标识符。
nElapse 指定了定时值;以毫秒为单位。
lpfnTimer 指定了应用程序提供的TimerProc回调函数的地址,该函数被用于处理WM_TIMER消息。如果这个参数为NULL,则WM_TIMER消息被放入应用程序的消息队列并由CWnd对象来处理。
说明:
这个函数设置一个系统定时器。指定了一个定时值,每当发生超时,则系统就向设置定时器的应用程序的消息队列发送一个WM_TIMER消息,或者将消息传递给应用程序定义的TimerProc回调函数。
lpfnTimer回调函数不需要被命名为TimerProc,但是它必须按照如下方式定义:
void CALLBACK EXPORT TimerProc(
HWND hWnd, // 调用SetTimer的CWnd的句柄
UINT nMsg, // WM_TIMER
UINT nIDEvent // 定时器标识
DWORD dwTime // 系统时间
);
定时器是有限的全局资源;因此对于应用程序来说,检查SetTimer返回的值以确定定时器是否可用是很重要的。
请参阅:WM_TIMER, CWnd::KillTimer, ::SetTimer
//-----------------------------------------------//
CWnd::OnTimer
afx_msg void OnTimer( UINT nIDEvent );
参数: nIDEvent 指定定时器的标识符。
说明:
当在SetTimer成员函数中指定的每一个时间间隔都被用来安装一个定时器之后,框架调用这个成员函数。
当在应用程序的消息队列中没有其它的消息时,Windows函数DispatchMessage发送一个WM_TIMER消息。
注意 框架调用这个成员函数来使你的应用程序可以处理一个Windows消息。传递给你的函数的参数反映了在消息收到时框架收到的参数。如果你调用了这个函数的基类实现,这个实现将使用最初随着消息传递过来的参数,而不是使用你提供给函数的参数。
请参阅:CWnd::SetTimer, WM_TIMER
//----------------------------------------//
UINT SetTimer(UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT*lpfnTimer) (HWND, UINT, UINT, DWORD) );
返回值:
如果函数成功,则返回新定时器的标识符。应用程序可以将这个值传递给KillTimer成员函数以销毁定时器。如果成功,则返回非零值;否则返回0。
参数: nIDEvent 指定了不为零的定时器标识符。
nElapse 指定了定时值;以毫秒为单位。
lpfnTimer 指定了应用程序提供的TimerProc回调函数的地址,该函数被用于处理WM_TIMER消息。如果这个参数为NULL,则WM_TIMER消息被放入应用程序的消息队列并由CWnd对象来处理。
说明:
这个函数设置一个系统定时器。指定了一个定时值,每当发生超时,则系统就向设置定时器的应用程序的消息队列发送一个WM_TIMER消息,或者将消息传递给应用程序定义的TimerProc回调函数。
lpfnTimer回调函数不需要被命名为TimerProc,但是它必须按照如下方式定义:
void CALLBACK EXPORT TimerProc(
HWND hWnd, // 调用SetTimer的CWnd的句柄
UINT nMsg, // WM_TIMER
UINT nIDEvent // 定时器标识
DWORD dwTime // 系统时间
);
定时器是有限的全局资源;因此对于应用程序来说,检查SetTimer返回的值以确定定时器是否可用是很重要的。
请参阅:WM_TIMER, CWnd::KillTimer, ::SetTimer
//-----------------------------------------------//
CWnd::OnTimer
afx_msg void OnTimer( UINT nIDEvent );
参数: nIDEvent 指定定时器的标识符。
说明:
当在SetTimer成员函数中指定的每一个时间间隔都被用来安装一个定时器之后,框架调用这个成员函数。
当在应用程序的消息队列中没有其它的消息时,Windows函数DispatchMessage发送一个WM_TIMER消息。
注意 框架调用这个成员函数来使你的应用程序可以处理一个Windows消息。传递给你的函数的参数反映了在消息收到时框架收到的参数。如果你调用了这个函数的基类实现,这个实现将使用最初随着消息传递过来的参数,而不是使用你提供给函数的参数。
请参阅:CWnd::SetTimer, WM_TIMER
//----------------------------------------//
参考资料: http://hi.baidu.com/ypxmaomao/blog/item/10f17cf4d55d7069dcc4741f.html
展开全部
我这机子上正常呀。只是每秒弹出一个消息框,无法退出了。如果不KillTimer的话。只能用任务管理器终止它
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
nIDEvent最好设成大于10的ID,避免与系统定义的事件冲突,另外SetTimmer(1,1000,NULL),不知道你为什么要设为0,还有个原因如果你前面的代码有的地方在运行过程中出现问题也会导致后面的SetTimmer失效,你可以先把其他代码屏蔽,让Timmer运行,明白了道理再做。
例:
SetTimmer(10,1000,NULL);
void CVCMIDlg::OnTimer (UINT_PTR nIDEvent)
{
switch(nIDEvent)
{
case 10:
AfxMessageBox("On Timer");
break;
}
}
这个简单的,百分百运行。
例:
SetTimmer(10,1000,NULL);
void CVCMIDlg::OnTimer (UINT_PTR nIDEvent)
{
switch(nIDEvent)
{
case 10:
AfxMessageBox("On Timer");
break;
}
}
这个简单的,百分百运行。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个ontimer应该是没有定义吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询