zoukankan      html  css  js  c++  java
  • 怎样使用SetTimer MFC 够具体

     转自:http://blog.csdn.net/ellor/article/details/1714741

    Timer事件,即定时器事件,是在游戏编程中,常常使用的一个事件。借助它能够产生定时运行动作的效果。这篇文章,就和大家一起探讨一下怎样使用SetTimer()函数。

               1、SetTimer定义在那里?

                SetTimer表示的是定义个定时器。依据定义指定的窗体,在指定的窗体(CWnd)中实现OnTimer事件,这样,就能够对应事件了。

    SetTimer有两个函数。一个是全局的函数::SetTimer()

    UINT SetTimer(
          HWND
    hWnd,              // handle of window for timer messages
          UINT nIDEvent,          // timer identifier
          UINT uElapse,           // time-out value
          TIMERPROC lpTimerFunc       // address of timer procedure
    );

     

               当中hWnd 是指向CWnd的指针,即处理Timer事件的窗体类。说道窗体类(CWnd),我们有必要来看一下CWnd的继承情况:CWnd有下面子类:CFrameWnd,CDialog,CView,CControlBar等类。这也意味这些类中都能够定义SetTimer事件。

    同一时候,SetTimer()在CWnd中也有定义,即SetTimer()是CWnd的一个成员函数。CWnd的子类能够调用该函数,来设置触发器。

     

    UINT SetTimer( UINT nIDEvent, UINTnElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );

    參数含义:

                nIDEvent:是指设置这个定时器的iD,即身份标志,这样在OnTimer()事件中,才干依据不同的定时器,来做不同的事件响应。这个ID是一个无符号的整型。

               nElapse

    是指时间延迟。单位是毫秒。这意味着,每隔nElapse毫秒系统调用一次Ontimer()。

               void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD)

    Specifies the address of the application-suppliedTimerProc callback function that processes theWM_TIMER messages. If this parameter is NULL, theWM_TIMER messages are placed in the application’s message queue and handled by theCWnd object。

            意思是,指定应用程序提供的TimerProc回调函数的地址,来处里这个Timer事件。假设是NULL,处理这个Timer事件的定义这个Timer的CWnd对象。他将WM_TIMER消息传递给这个对象,通过实现这个对象的OnTimer()事件来处理这个Timer事件。

    所以,普通情况下,我们将这个值设为NULL,有设置该定时器的对象中的OnTimer()函数来处理这个事件。

    相同的,我们再看看KillTimer()和OnTimer()的定义:

    KillTimer同SetTimer()一样,他也有两个,一个是全局的::KillTimer(),还有一个是CWnd的一个函数。他的声明例如以下:

     

    //全局函数

    BOOL KillTimer(
        HWND
    hWnd,      // handle of window that installed timer
        UINT uIDEvent     // timer identifier
    );

    //CWnd函数

    BOOL KillTimer( int nIDEvent);

    这两个函数表示的意思是将iD为nIDEVENT的定时器移走。使其不再作用。其使用方法如同SetTimer()一样。

    再看看OnTimer()

    CWnd::OnTimer  

    afx_msg void OnTimer( UINT nIDEvent);

    ontimer()是响应CWnd对象产生的WM_Timer消息。nIDEvent表示要响应TIMER事件的ID。

    二、Timer事件的使用:

    由以上的分析,我们应该非常清楚,怎样来使用Timer事件。假定我们在视图上画一个渐变的动画。我们首先在菜单条上加入一个菜单项,给这个菜单加入命令响应:

    pView->SetTimer(1,1000,NULL);//pView是视图类的指针,这里是在视图类其中设置一个定时器。

    加入完成,再给视图类加入一个WM_Timer事件的对应。在OnTimer()函数中编写汉书,进行对应。

    如此,就能做出动画。

     

  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4295362.html
Copyright © 2011-2022 走看看