动态启动和停止计时器――MFC

在程序中我们往往需要使用计时器,此程序就是实现计时器动态启动和停止的一个例子。程序运行时,nCount不停的增加1直到变成1000。用一个进度条显示完成的百分比。点击Start按钮,nCount开始自增,进度条满之前如果点击CancelnCount归零并清空进度条。进度条为零且未StartCancel可以退出对话框。

1.       创建如下名对话框,并创建相应的CComputDlg类,并在类中增加如下私有数据成员:

       int m_nTimer;

       int m_nCount;  //在计算过程中不断递增,它除以nMaxCount得到完成百分比

       enum{nMaxCount = 100000};

 

2.       CComputDlg构造函数中添加一行代码:

       m_nCount = 0;//确保没有启动计算进程的情况下,Cancel按钮仍然可以工作

 

一定要在注释行    //}}AFX_DATA_INIT之外添加该行

3.       映射OnStart()消息函数

void CComputeDlg::OnStart()

{

       // TODO: Add your control notification handler code here

  MSG message;
 m_nTimer = SetTimer(1, 100, NULL);//1/10 second
 ASSERT(m_nTimer != 0);
 GetDlgItem(IDC_START)->EnableWindow(FALSE);//禁用start按钮
 volatile int nTemp;
 m_nCount = 1;
 CProgressCtrl* pBar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
 pBar->SetRange(1,100);
 pBar->SetPos(1);

}

4.       添加OnCancel()消息函数

void CComputeDlg::OnCancel()

{

       // TODO: Add extra cleanup here
 if(GetDlgItem(IDC_START)->IsWindowEnabled() == TRUE)
 {
  //prior to Start button
  CDialog::OnCancel();
 }
 else
 { 
//   m_nCount = nMaxCount;
  KillTimer(m_nTimer);
  m_nCount = 0;//force exit from OnStart
  CProgressCtrl* pBar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
  pBar->SetPos(m_nCount*100/nMaxCount);
    GetDlgItem(IDC_START)->EnableWindow(TRUE);//起用start按钮

 }      

/*    CDialog::OnCancel();*/

}

5.       添加WM_TIMER消息处理函数

void CComputeDlg::OnTimer(UINT nIDEvent)

{

       // TODO: Add your message handler code here and/or call default

CProgressCtrl* pBar = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);
  pBar->SetPos(m_nCount);
  if(m_nCount == 100)
  {
  
   KillTimer(1);//1标识计时器的编号,第一个
   m_nCount = 1;
   pBar->SetPos(1);
   GetDlgItem(IDC_START)->EnableWindow(TRUE);

  } 

       CDialog::OnTimer(nIDEvent);

}

 

只要在程序中触发弹出了该对话框,就可以使用了J

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值