MFC中定时器的使用有两种方法:
消息通知的方法;回调函数的方法; 消息通知的方法比较简单,只需要在控件界面生成一个OnTimer的消息映射函数就行。 以在界面生成两个定时亮灭的红绿灯为例: 首先用画图软件生成两个bmp格式位图,保存至工程的rec目录下,并加载; 然后在界面上放置两个按键和两个picture control控件,如图所示: 注意:picture control控件的type属性要选择为bitmap,且image要选择相应的位图; 采用消息通知方式的代码: void CTimer1008Dlg::OnBnClickedBtnRed() { // TODO: 在此添加控件通知处理程序代码 if (m_nRedID == 0) { m_nRedID = SetTimer(1, 500, NULL); } else { KillTimer(m_nRedID); m_nRedID = 0; ::ShowWindow(::GetDlgItem(m_hWnd, IDC_Red), SW_HIDE); } } void CTimer1008Dlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 HWND hRed; int nShow; if (nIDEvent == m_nRedID) { hRed = ::GetDlgItem(m_hWnd, IDC_Red); if (::IsWindowVisible(hRed)) { nShow = SW_HIDE; } else { nShow = SW_SHOW; } ::ShowWindow(hRed, nShow); } CDialogEx::OnTimer(nIDEvent); }采用回调函数方式的代码如下:
void CTimer1008Dlg::OnBnClickedBtnGreen() { // TODO: 在此添加控件通知处理程序代码 if (m_nGreenID == 0) { m_nGreenID = SetTimer(2, 1000, TimerProc); } else { KillTimer(m_nGreenID); m_nGreenID = 0; ::ShowWindow(::GetDlgItem(m_hWnd, IDC_green), SW_HIDE); } } void CALLBACK TimerProc(HWND hWnd, UINT uMsg, UINT uID, DWORD dwTimer) { HWND hGreen = ::GetDlgItem(hWnd, IDC_green); int nShow; if (::IsWindowVisible(hGreen)) { nShow = SW_HIDE; } else { nShow = SW_SHOW; } ::ShowWindow(hGreen, nShow); }