问题就是运行时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函数已经在头文件里定义了,整个程序可成功编译。

慕侠2389804
浏览 181回答 3
3回答

幕布斯6054654

CWnd::SetTimerUINT 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_TIMERUINT nIDEvent // 定时器标识DWORD dwTime // 系统时间);定时器是有限的全局资源;因此对于应用程序来说,检查SetTimer返回的值以确定定时器是否可用是很重要的。请参阅:WM_TIMER, CWnd::KillTimer, ::SetTimer//-----------------------------------------------//CWnd::OnTimerafx_msg void OnTimer( UINT nIDEvent );参数: nIDEvent 指定定时器的标识符。说明:当在SetTimer成员函数中指定的每一个时间间隔都被用来安装一个定时器之后,框架调用这个成员函数。当在应用程序的消息队列中没有其它的消息时,Windows函数DispatchMessage发送一个WM_TIMER消息。注意 框架调用这个成员函数来使你的应用程序可以处理一个Windows消息。传递给你的函数的参数反映了在消息收到时框架收到的参数。如果你调用了这个函数的基类实现,这个实现将使用最初随着消息传递过来的参数,而不是使用你提供给函数的参数。

FFIVE

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;}}这个简单的,百分百运行。

慕哥6287543

我这机子上正常呀。只是每秒弹出一个消息框,无法退出了。如果不KillTimer的话。只能用任务管理器终止它
打开App,查看更多内容
随时随地看视频慕课网APP