zoukankan      html  css  js  c++  java
  • 定时器

    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;  // 初始化
    }
    
  • 相关阅读:
    设计模式:迭代器模式(Iterator Pattern) 明
    设计模式:目录导航 明
    设计模式:状态模式(State Pattern) 明
    设计模式:命令模式(Command Pattern) 明
    二维DP—— POJ 3186
    COM组件里自动化接口与普通接口的转换
    贪心好题——poj3044
    三分查找——POJ3301
    静态链表+DFS——poj 3272
    妙用队列优化——校赛题
  • 原文地址:https://www.cnblogs.com/17bdw/p/10354867.html
Copyright © 2011-2022 走看看