用MFC多媒体定时器做一个每1秒钟加一次的计时器,点开始计时按钮开始计时,点关闭计时按钮关闭计时。
1、在库文件Med_timeDlg.h文件中添加代码
class CMed_timeDlg : public CDialog
{
// Construction
public:CMed_timeDlg(CWnd* pParent = NULL); // standard constructorUINT timerID;//自己添加的定时器ID变量UINT timerID1;//自己添加的定时器ID变量void DestroyTimer();//自己声明的销毁定时器函数UINT CreateTimer();//自己声明的创建定时器函数void OnTimer(UINT nIDEvent);
static void CALLBACK TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);//定时器回调函数
}
2、在项目对话框Med_timeDlg.cpp文件中添加代码
UINT CMed_timeDlg::CreateTimer()
{timeBeginPeriod(1);//设置定时器设备的最小时间分辨率timerID = timeSetEvent(1000, 1, TimeProc, (DWORD)this, TIME_PERIODIC);return timerID;//返回定时器ID// timeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK IP TimeProc, DWORD_PTR dwUser, UINT fuEvent);
//创建并初始化定时器事件,定时器回调函数入口地址
//uDelay:定时器触发时间间隔,以毫秒为单位
//uResolution:定时器设备精度,以毫秒为单位,,默认为1ms
//LpTimeProc:定时器出发时间的回调函数的地址
//dwUser:传递给回调函数的数据
//fuEvent:定时类型,TIME_ONSHOT表示uDelay毫秒后只产生一次事件,TIME_PERIOFIC表示每隔uDelay毫秒周期性的产生事件}void CMed_timeDlg::DestroyTimer()
{timeKillEvent(timerID);//销毁定时器timeEndPeriod(1);//清除上次调用 timeBeginPeriod 函数时指定的最小计时器分辨率
}void CALLBACK CMed_timeDlg::TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{CMed_timeDlg* time_dlg = (CMed_timeDlg*)dwUser;time_dlg->OnTimer(uID );//uID:多媒体定时器的ID,ID值由timeSetEvent创建定时器事件时返回//uMsg:保留 不使用//dwUser:由timeSetEvent传递的用户数据//dw1,dw2:保留 不使用
}void CMed_timeDlg::OnBUTTONstart()
{CreateTimer();}void CMed_timeDlg::OnBUTTONstop()
{DestroyTimer();
}int i=0;
void CMed_timeDlg::OnTimer(UINT nIDEvent)
{CString str;i++;str.Format("%d",i);SetDlgItemText(IDC_STATIC1,str);}
运行程序
源码下载