标签:默认 dev 定时器 dial 否则 null cpp idc 构造
写一个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()函数里添加代码。
m_lefttime是自定义为30秒,每次都会减少。当减少为0,就退出定时器。
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;  // 初始化
}标签:默认 dev 定时器 dial 否则 null cpp idc 构造
原文地址:https://www.cnblogs.com/17bdw/p/10354867.html