其他分享
首页 > 其他分享> > 定时器

定时器

作者:互联网

定时器

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