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不出来。
展开
 我来答
百度网友58b14a3
2009-04-21 · TA获得超过1588个赞
知道小有建树答主
回答量:593
采纳率:0%
帮助的人:496万
展开全部
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
//----------------------------------------//

参考资料: http://hi.baidu.com/ypxmaomao/blog/item/10f17cf4d55d7069dcc4741f.html

fllowfeel
2009-04-21 · TA获得超过183个赞
知道答主
回答量:180
采纳率:0%
帮助的人:142万
展开全部
我这机子上正常呀。只是每秒弹出一个消息框,无法退出了。如果不KillTimer的话。只能用任务管理器终止它
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yxcncoo
2009-04-21 · 超过32用户采纳过TA的回答
知道答主
回答量:392
采纳率:0%
帮助的人:104万
展开全部
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;
}
}
这个简单的,百分百运行。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuhu314
2009-04-21 · TA获得超过400个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:278万
展开全部
你这个ontimer应该是没有定义吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式