• 怎样使用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()函数中编写汉书,进行对应。

    如此,就能做出动画。

     

  • 相关阅读:
    Codeforces 992C(数学)
    Codeforces 990C (思维)
    Codeforces 989C (构造)
    POJ 1511 Invitation Cards(链式前向星,dij,反向建边)
    Codeforces 1335E2 Three Blocks Palindrome (hard version)(暴力)
    POJ 3273 Monthly Expense(二分)
    POJ 2566 Bound Found(尺取前缀和)
    POJ 1321 棋盘问题(dfs)
    HDU 1506 Largest Rectangle in a Histogram(单调栈)
    POJ 2823 Sliding Window(单调队列)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4004807.html
Copyright © 2020-2023  润新知