关于C++里面,SetTimer问题,回调函数用TimerProc还是OnTime?
3个回答
2013-08-05
展开全部
问题1:
两种方法都可以,如果给SetTimer的最后一个参数传入NULL,需要添加WM_TIMER消息映射,让VC自动生成OnTimer函数;如果传入一个回调函数地址,系统就会调用你写的回调函数。除了写法略有不同,二者几乎没啥区别的。如果你要设置多个计时器,如果使用OnTimer函数,需要在其内部区分计时器ID值;如果使用回调函数,可以为每个定时器传入不同的回调函数,这就它们的区别。
问题2:
如果使用OnTimer函数,必须在窗口类内部添加WM_TIMER消息映射,并在窗口类内部实现OnTimer进行消息响应。如果使用回调函数,这个函数可以是全局的。
回调函数的声明可以是这样:
voidCALLBACKMyTimerProc(HWNDhWnd,UINTnMsg,UINTnIDEvent,DWORDdwTime)
参数1是设置定时器的窗口句柄,参数2是消息类型,也就是WM_TIMER,参数3是定时器ID,参数4是时间延迟。你的程序没有创建窗口,不能使用定时器,定时器是依赖于窗口消息的,你必须指定一个处理WM_TIMER消息的窗口。
两种方法都可以,如果给SetTimer的最后一个参数传入NULL,需要添加WM_TIMER消息映射,让VC自动生成OnTimer函数;如果传入一个回调函数地址,系统就会调用你写的回调函数。除了写法略有不同,二者几乎没啥区别的。如果你要设置多个计时器,如果使用OnTimer函数,需要在其内部区分计时器ID值;如果使用回调函数,可以为每个定时器传入不同的回调函数,这就它们的区别。
问题2:
如果使用OnTimer函数,必须在窗口类内部添加WM_TIMER消息映射,并在窗口类内部实现OnTimer进行消息响应。如果使用回调函数,这个函数可以是全局的。
回调函数的声明可以是这样:
voidCALLBACKMyTimerProc(HWNDhWnd,UINTnMsg,UINTnIDEvent,DWORDdwTime)
参数1是设置定时器的窗口句柄,参数2是消息类型,也就是WM_TIMER,参数3是定时器ID,参数4是时间延迟。你的程序没有创建窗口,不能使用定时器,定时器是依赖于窗口消息的,你必须指定一个处理WM_TIMER消息的窗口。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-05
展开全部
如果SetTimer中的句柄设置为空则需要响应OnTimer函数,如果不为空,可以写一个TimerProc回调函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
settimer的最后一个参数不就是你的回调函数名吗。。。。当然你用缺省的也没啥不可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询