文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>(转载)VC定时器使用回调函数

(转载)VC定时器使用回调函数

时间:2010-10-06  来源:ccmfc

回调函数的使用。

    如果不想使用窗体的WM_TIMER消息函数处理,可以使用回调函数来取代,增加一个回调函数。

    首先,定义一个回调函数,回调函数的定义必须按照如下格式。

void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime );


我的实现函数如下:

void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime )

{

AfxMessageBox("Timer is running!");//定时器时间到,强出一对话框,表明定时器已经运行。

}


SetTimer(1,1000,(TIMERPROC)TimerProc);//用回调函数处理,此时对话框的消息处理函数不再处理。

   如果是在主线程中调用其他类的回调函数:

    static void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime );

    

void CALLBACK CBattery::TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime )

{

AfxMessageBox("Timer is running!");//定时器时间到,强出一对话框,表明定时器已经运行。

}

 SetTimer(1,1000,(TIMERPROC)CBattery::TimerProc);

 

通常,我们在使用定时器时,只用到三个参数,即
UINT CWnd::SetTimer(
UINT nIDEvent,
UINT nElapse,
void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD)
);

其实,这个函数只是MFC对API的封装,其实现函数为:

_AFXWIN_INLINE UINT CWnd::SetTimer(UINT nIDEvent, UINT nElapse,

void (CALLBACK* lpfnTimer)(HWND, UINT, UINT, DWORD))

{
ASSERT(::IsWindow(m_hWnd));
 return ::SetTimer(m_hWnd, nIDEvent, nElapse,(TIMERPROC)lpfnTimer);
}

由此可见,CWnd::SetTimer只是将API函数SetTimer的第一个参数设置成它自己的句柄而已。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载