`
jafisher
  • 浏览: 56698 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MFC 定时器之妙用

阅读更多
    现在有这么一个问题,在VC编程中,如果要每隔一段时间去响应一个事件,应该怎么处理?
    1.Sleep(int n)函数;(S 一定要大写,这个和C不一样)
   2.WaitForSingleObject()等待函数;
    其中,用Sleep()多的话应该知道,它的时间不是很精确,且会让程序陷入休眠,而且这个函数其实是VC专门为线程设计的。而等待函数是需要SetEvent来实现唤醒的。
    还有第三个方法,就是定时器的使用。
   我们知道,在VC的MFC中,已经为我们封装好了很多全面和强大的函数集,所以在MFC编程时,巧妙地调用MFC函数库可以为我们省去很多麻烦。其中定时器也可以在MFC程序中很好地利用。

    在MFC中和定时器相关的有三个函数:
1.设置定时器(定义一个定时器的属性):
  SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT*lpfnTimer)(HWND,UINT,UINT,DWORD));
2.定时器响应(响应系统定义WM_TIMER消息):
  OnTimer( UINT nIDEvent );
3.释放定时器:
  KillTimer( int nIDEvent );
    其中:
UINT nIDEvent:定时器的ID,在一个程序中用这个ID来确定是那个定时器发送的消息。
UINT nElapse: 定义刷新时间,即间隔多长时间刷新一次,单位是毫秒。
void (CALLBACK EXPORT* lpfnTimer)( HWND, UINT, UINT, DWORD):回调函数的参数,实现刷新时所做的操作,一般情况下都设为0。

    在这里就用一个简单的例子来说明定时器在MFC中是如何使用的。

1.建立单文档程序Timer。

2.在resource.h中定义两个定时器的ID
#define TIMER1  1
#define TIMER2  2

3.在CMainFrame的OnCreate函数中定义两个定时器的属性。
SetTimer(TIMER1,3000,0);
SetTimer(TIMER2,5000,0);

4.在类视图中右击CMainFrame属性,在消息响应函数中找到WM_TIMER,然后添加响应函数OnTimer()。
void CMainFrame::OnTimer(UINT nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    switch(nIDEvent)
    {
      case TIMER1:
      {   
          AfxMessageBox("定时器1!");
          break;
      }
      case TIMER2:
      {   
          AfxMessageBox("定时器2!");
           break;
      }
      default:
           break;
    }
    CFrameWnd::OnTimer(nIDEvent);
}

5.在CMainFrame的析构函数中添加释放定时器函数。
KillTimer(TIMER1);
KillTimer(TIMER2);

    这样,一个简单的定时器程序就生成了,运行后可以看到,每隔3秒就会弹出一个消息对话框“定时器1”,每隔5秒就会弹出一个消息对话框“定时器2”。

    这种情况是在程序运行后定时器就直接启动了,很多时候我们需要的是在响应一次事件或者说点击一个按钮后再去执行定时器,那么这时应该怎么修改呢?也用一个实例来说明吧,因为我觉得可能说一大堆废话也抵不上一个简单而正确的实例更具说服力。
    现在,我生成了一个MFC多文档应用程序,我希望在点击菜单条上的某个按钮后再去执行定时器。这时就不是在CMainFrame里面操作了,因为我们是要在对话框上进行定时器的操作,而CView这个类是负责对话框的对应操作,所以要把定时器定义在CView里面。

1.建立多文档程序Timer。

2.在resource.h中定义两个定时器的ID
#define TIMER1  1
#define TIMER2  2

3.在CTimerView的OnInitialUpdate函数中定义两个定时器的属性。
SetTimer(TIMER1,3000,0);
SetTimer(TIMER2,5000,0);

4.在类视图中右击CTimerView属性,在消息响应函数中找到WM_TIMER,然后添加响应函数OnTimer()。
void CTimerView::OnTimer(UINT nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    //Hwnd为一个变量,初始值为false,点击某个按钮后在其响应函数中将其置为true
    switch(nIDEvent && Hwnd){
      case TIMER1:
      {   
          AfxMessageBox("定时器1!");
          break;
      }
      case TIMER2:
      {   
          AfxMessageBox("定时器2!");
           break;
      }
      default:
           break;
    }
    CFrameWnd::OnTimer(nIDEvent);
}

5.在CTimerView中添加OnDestroy()函数,在函数中释放定时器。
KillTimer(TIMER1);
KillTimer(TIMER2);

    现在,运行程序后,没有马上弹出预定的对话框,而是在我们点击某个按钮或者响应某个事件后对话框才弹出,同样是点击按钮后,每隔3秒弹出对话框“定时器1”,每隔5秒弹出“定时器2”。
    其实在不同的类,定时器的用法都是基本一致的,只要找到类的初始函数和释放函数,就能轻松实现定时功能了,就这么简单。
分享到:
评论
2 楼 aogeback 2011-05-28  
看到楼主来自湖南大学了
1 楼 zk_sima 2011-04-05  
楼主标题党,这也算妙用吗,这叫基础知识普及吧,没看到你用定时器做任何妙用

相关推荐

    MFC定时器的使用 MFC定时器的使用

    本篇文章将深入探讨如何在MFC应用中使用定时器。 首先,MFC定时器分为两种类型:消息定时器和窗口定时器。消息定时器通过发送WM_TIMER消息到指定窗口来触发事件,而窗口定时器则使用CTimer类,它基于CObject并直接...

    MFC定时器的用法

    在Microsoft Foundation Classes (MFC)库中,定时器是一个非常重要的功能,用于在特定时间间隔后执行特定的任务。...通过深入研究这个项目,我们可以掌握如何在自己的MFC应用中有效地使用定时器功能。

    MFC定时器源代码

    MFC库极大地简化了Windows API的使用,使得开发者可以更高效地构建用户界面和处理系统事件。在MFC中,定时器(Timer)是一个重要的功能,用于在指定间隔执行特定任务,这在很多应用中都十分常见,例如自动更新、游戏...

    MFC定时器的使用介绍

    较为详细地介绍了MFC定时器的使用方法,希望能对就定时器不是很清楚的朋友有帮助

    mfc 定时器简单用法小例子

    本示例“mfc 定时器简单用法小例子”将帮助我们理解如何在MFC应用中集成和使用定时器。在MFC中,定时器主要通过`Ctimer`类来实现,配合`OnTimer`消息处理函数。 1. **Ctimer类**:`CTimer`并不是MFC的标准类,而是...

    MFC 通过定时器实现space键的暂停和开始

    在MFC(Microsoft Foundation Classes)框架中,C++程序员经常使用定时器(Timers)来实现各种周期性任务,如用户界面的动画效果或者后台进程的监控。本示例主要探讨如何利用定时器来实现Space键对MFC图片幻灯片的...

    MFC中利用多线程实现定时器

    本篇文章将详细探讨如何在MFC中利用多线程来实现定时器。 首先,我们需要了解MFC中的`CWinThread`类,它是所有线程的基础类。创建一个新的线程时,通常会从`CWinThread`派生一个类,并重写其`Run`成员函数,这个...

    VC++ MFC 定时器函数 刷新窗口

    在Windows编程环境下,特别是在使用Microsoft Foundation Classes (MFC)进行开发时,定时器是一个非常实用的功能。本文将深入探讨如何使用`SetTimer`函数来创建定时器,并通过定时器来实现窗口的刷新。 #### 一、...

    MFC做的定时器

    本人开发此工具目的有两个,一、熟悉MFC空间操作,熟悉MFC定时器的操作和使用。二、由于本人整天对着电脑,经常容易忘记时间,如果自己做一个定时器,能够在设定时间提醒自己该做什么事。那可是一举多得的事情。最后...

    MFC定时器截屏显示

    通过查看和分析这些源代码,你可以更深入地理解MFC定时器的使用,以及如何结合Windows API进行屏幕截取和显示操作。这不仅有助于提升Windows图形界面编程技能,还能够学习到如何在实际项目中整合这些技术。

    MFC定时器的使用PPT

    【MFC定时器的使用】 MFC定时器是Windows编程中的一个重要组成部分,它允许开发者创建周期性执行的任务。定时器是Windows系统中的一个资源,通过发送定时消息来触发指定的操作。MFC(Microsoft Foundation Classes...

    MFC高精度定时器,多媒体定时器,VS2019,C++

    总结来说,MFC高精度定时器主要涉及到多媒体定时器的使用,通过`timeSetEvent()`和`timeKillEvent()`函数进行控制,配合回调函数处理定时事件。同时,MFC也提供了窗口消息定时器,通过消息映射机制来处理定时任务。...

    C++ MFC 定时器、多线程项目

    定时器、创建主线程、子线程

    MFC C++控制台 定时器

    在MFC中,我们可以使用CWinApp、CWnd或CDialog等类来创建定时器。定时器是Windows系统的一个重要组成部分,它允许程序在特定时间间隔执行某些操作。在C++中,我们通常通过使用CTimer类来实现定时器功能。 1. **C...

    C++ VC MFC 简单定时器

    在这个主题中,我们将深入探讨如何使用MFC来创建一个简单的定时器。 标题 "C++ VC MFC 简单定时器" 指向的是一个使用MFC实现的定时器类,这个类可能包含了启动、停止和超时判断等基本功能。在Windows编程中,定时器...

    用MFC做的定时器,用了mediaPlayer控件

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)框架来创建一个定时器,并结合Windows Media Player控件来实现在指定时间播放音乐的功能。首先,我们需要理解MFC的本质,它是一个C++库,用于...

    dingshiqi-.rar_mfc 定时器

    总结起来,“dingshiqi-.rar_mfc 定时器”文件可能包含了一个使用MFC创建和管理定时器的实例,通过文档或代码展示了如何在VC++环境下设置和响应定时器事件。学习并理解这些概念将有助于你在开发中实现各种时间驱动的...

    使用定时器(MFC)示例代码 C++

    MFC库包含了许多与Windows API交互的类,其中之一就是定时器(Timer)。定时器在各种应用程序中都有广泛的应用,例如更新用户界面、执行周期性任务等。在这个"使用定时器(MFC)示例代码 C++"中,我们将探讨如何在MFC...

    MFC中一个定时器程序(1s刷新一次)

    在MFC中实现一个定时器程序是相当常见的需求,特别是对于那些需要定期执行某些任务的应用。在这个例子中,我们讨论的是如何在MFC对话框应用程序中设置一个每秒刷新一次的定时器。 首先,我们需要了解WM_TIMER消息。...

    MFC的简单定时器(主要是C++)

    在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架中实现一个简单的定时器。MFC是Microsoft提供的一套C++库,用于构建Windows应用程序。它为开发者提供了丰富的类,简化了Windows API的使用。...

Global site tag (gtag.js) - Google Analytics