定时器
作者:互联网
定时器
Static控件
写一个Static控件,ID设置为【IDC_STATIC_TIME】,添加成员变量为【m_szTime】,描述文字写成【时间:还剩 30 秒】
定时器初始化
在主界面对话框的【属性】-【消息】,选择【WM_TIMER】增加一个【OnTimer()】。
在对话框的【.cpp】文件最顶部定义一个宏【#define TIMER_ELAPSE_ID 100】
在OnInitDialog()函数中增加【SetTimer(TIMER_ELAPSE_ID, 1*1000, NULL);】
但是在控件显示前,要对static进行初始化,需要写【m_szTime = _T("时间:还剩 30 秒");】
BOOL CMFC08OnTimerDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化代码
m_szTime = _T("时间:还剩 30 秒");
UpdateData(FALSE);
SetTimer(TIMER_ELAPSE_ID, 1 * 1000, NULL);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
OnTimer
在OnTimer()函数里添加代码。
m_lefttime是自定义为30秒,每次都会减少。当减少为0,就退出定时器。s
void CMFC08OnTimerDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
// TODO: Add your message handler code here and/or call default
switch (nIDEvent)
{
case TIMER_ELAPSE_ID: // 接收消息
UpdateData(TRUE);
m_szTime.Format(_T("时间:还剩: %2d 秒"), --m_lefttime);
UpdateData(FALSE);
if (m_lefttime == 0) // 减少为0
{
KillTimer(nIDEvent); //
UpdateData(TRUE);
CDialog::OnOK();
}
break;
default:
break;
}
CDialogEx::OnTimer(nIDEvent);
}
m_lefttime在主界面对话框的【.h】定义。
int m_lefttime;
m_lefttime在构造函数里进行初始化。
CMFC08OnTimerDlg::CMFC08OnTimerDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MFC_08_ONTIMER_DIALOG, pParent)
, m_szTime(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_lefttime = 30; // 初始化
}
标签:定时器,szTime,30,TIMER,lefttime,OnTimer,ID 来源: https://www.cnblogs.com/17bdw/p/10354867.html