MFC中的定时控制功能主要由下面三个函数共同实现:
SetTimer, KillTimer()和OnTimer().
简单的说,Settimer是设置一个计时器,当Settimer设置的时间到了,就会自动执行Ontimer中的代码。KillTimer用于停止计时器。
下面是我用VS2010写的简单demo:
源码下载地址:https://download.csdn.net/download/huihong_vitality/10580895
void CTimerDlg::OnBnClickedTimer()
{
minutes = 0; //分钟
seconds = 0; //秒
milliseconds = 0; //毫秒
SetTimer(1, 10, NULL); //每隔10毫秒执行一次OnTimer
}
void CTimerDlg::OnTimer(UINT_PTR nIDEvent)
{
CString str;
switch(nIDEvent)
{
case 1:
milliseconds++;
if (milliseconds == 100)
{
milliseconds = 0;
seconds++;
}
if (seconds == 60)
{
seconds = 0;
minutes++;
}
str.Format("%02i : %02i : %02i", minutes, seconds, milliseconds);
m_time.SetWindowText(str);
break;
case 2:
m_cdNumber--;
str.Format("%i", m_cdNumber);
GetDlgItem(IDC_STATIC_Countdown)->SetWindowText(str);
if (m_cdNumber == 0)
{
KillTimer(2);
}
break;
}
CDialogEx::OnTimer(nIDEvent);
}
void CTimerDlg::OnBnClickedReset()
{
KillTimer(1);
m_time.SetWindowText("00 : 00 : 00");
}
void CTimerDlg::OnBnClickedCountdown()
{
CString str;
GetDlgItem(IDC_EDIT_Countdown)->GetWindowText(str); //获取编辑框的时间
GetDlgItem(IDC_STATIC_Countdown)->SetWindowText(str);
m_cdNumber = atoi((const char *)str);
SetTimer(2, 1000, NULL);
}
参考:https://jingyan.baidu.com/article/fc07f9891fba6712ffe51997.html