• 定时器


    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,就退出定时器。

    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;  // 初始化
    }
    
  • 相关阅读:
    vue 跳转路由传参数用法
    百度地图放大之后,多边形,矩形覆盖物消失
    百度地图画多边形,画圆, 监听事件不触发原因
    兄弟组件之间如何通信
    vue如何触发某个元素的单击事件?
    input 清空值。(转载)
    inline-block元素水平居中问题
    android 浏览器对图片加载高度渲染问题
    IE下png图片黑边问题
    IE css hack整理
  • 原文地址:https://www.cnblogs.com/17bdw/p/10354867.html
Copyright © 2020-2023  润新知