SetTimer定時器與WM_TIMER窗口消息詳解

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函數指針。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/mallocguy/archive/2009/01/03/3691272.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章