zoukankan      html  css  js  c++  java
  • VC定时器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的子类均可以定义SetTimer事件。

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

    UINT SetTimer(UINT nIDEvent, UINT nElapse, 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-supplied TimerProc callback function that processes the WM_TIMER messages. If this parameter is NULL, the WM_TIMER messages are placed in the application’s message queue and handled by the CWnd object。

    意思是,指定应用程序提供的TimerProc回调函数的地址,来处里这个Timer事件。如果是NULL,系统将交由OnTimer()来处理这个Timer事件。

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

    例:SetTimer(1,1000,NULL);

    如果我要加入两个或者两个以上的 timer怎么办? 继续用SetTimer函数吧,上次的timer的ID是1,这次可以是2,3,4。

    SetTimer(2,1000,NULL);

    SetTimer(3,500,NULL);

    WINDOWS会协调他们的。当然onTimer函数体也要发生变化,要在函数体内添加每一个timer的处理代码:

    onTimer(nIDEvent)
    {
        switch(nIDEvent)
        {
            case 1:........;
                break;
            case 2:.......;
                break;
            case 3:......;
                break;
        }
    }

    二、我们再看看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。
  • 相关阅读:
    ListCtrl中垂直滚动条自动滚动
    auth组件
    母版的继承
    mysql数据备份和恢复
    部署MHA
    安装mysql
    yum源优化
    存储过程
    redis哨兵、集群
    redis主从同步
  • 原文地址:https://www.cnblogs.com/zhangpengshou/p/1429770.html
Copyright © 2011-2022 走看看