zoukankan      html  css  js  c++  java
  • [转]SetTimer定时器与WM_TIMER窗口消息详解

    原地址:http://blog.csdn.net/mallocguy/article/details/3691272

    SetTimer的函数原型为:

    UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);

    其中hWnd是和timer关联的窗口句柄,此窗口必须为调用SetTimer的线程所有;如果hWnd为NULL,没有窗口和timer相关联,并且nIDEvent参数被忽略。

    nIDEvent是timer的标志,非零值;如果hWnd非NULL而且与timer相关联的窗口已经存在一个为此标志的timer,则此次SetTimet调用将用新的timer代替原来的timer。timer标志和窗口相关,两个不同的窗口可以拥有nIDEvent相同的timer。

    uElapse是以毫秒为单位的时间数,范围为1ms到4,294,967,295ms,这个值只是windows每隔多久时间给程序发送WM_TIMER消息。

    lpTimerFunc是一个回调函数的指针,如果lpTimerFunc为NULL,系统将向应用程序队列发送WM_TIMER消息;如果lpTimerFunc指定了一个值,DefWindowProc将处理WM_TIMER消息时调用这个lpTimerFunc所指向的回调函数, 所以即使使用TimerProc代替WM_TIMER也需要向窗口分发消息。

    SetTimer的返回值:如果hWnd为NULL,返回值为新建立的timer的ID,如果hWnd非NULL,返回一个非0整数,如果SetTimer调用失败则返回0。

    KillTimer的函数原型为:BOOL KillTimer ( HWND hWnd , UINT_PTR uIDEvent ) ;

    WM_TIMER消息:

    消息参数:wParam和lParam

    wParam为计时器ID,wParam的值将随传递到窗口过程中的WM_TIMER消息的不同而不同。

    lParam为指向TimerProc的指针,如果调用SetTimer时没有指定TimerProc,则lParam为NULL。

    三种使用计时器的方法:

    I.将第四个参数lpTimerFunc置为NULL而不使用TimerProc;在窗口过程中处理WM_TIMER消息。

    II. 将第四个参数lpTimerFunc指向TimerProc函数。使用TimerProc函数处理WM_TIMER消息;

    III.第一个参数hWnd设为NULL,第四个参数设为TimerProc函数指针。

  • 相关阅读:
    Android中Handler原理
    微软柯塔娜(Cortana)的一句名言
    C# 单例模式的五种写法
    HTTP Status 404
    PLSQL中显示Cursor、隐示Cursor、动态Ref Cursor差别
    Android 开发之集成百度地图的定位与地图展示
    iOS知识点汇总
    优化报表系统结构之报表server计算
    淘宝中间的一像素线(手机端)
    解决yum升级的问题“There was a problem importing one of the Python modules”
  • 原文地址:https://www.cnblogs.com/foxhengxing/p/2443101.html
Copyright © 2011-2022 走看看