如何使用定时器

2009-05-16 00:43:56

 

函数源型


   UINT_PTR SetTimer(     //创建一个定时器
         HWND hWnd,  // 所在线程的handler,如果这个值为Null而下面nIDEvent
                    这个参数不为0,表示替换nIDEvent这个定时器
         UINT_PTR nIDEvent,// 定时器ID,多个定时器时,可以通过该ID判断是
                          哪个定时器
         UINT uElapse,      // 时间间隔,单位为毫秒
         TIMERPROC lpTimerFunc   // 回调函数
              );


   BOOL KillTimer(           //释放一个定时器
          HWND hWnd,            //释放handle线程的定时器
      UINT_PTR uIDEvent    //释放编号为 uIDEvent 的定时器
          );
   

 

例子,

 

20 个200毫秒    后退出程序

 

 

;MASMPlus 代码模板 - 普通的 Windows 程序代码

.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc

includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
 
 WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
 WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
 
.DATA
 szClassName db "MASMPlus_Class",0
 Counter     db  20
.DATA?
 hInstance dd  ?
 Handle1    dd    ?
   Handle2    dd  ?
 TimerID     dd  ? 
 
.CODE
START:

 invoke GetModuleHandle,NULL
 mov hInstance,eax
 invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
 invoke ExitProcess,0

WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
 LOCAL wc   :WNDCLASSEX
 LOCAL msg  :MSG
 local hWnd :HWND
 
 mov wc.cbSize,sizeof WNDCLASSEX
 mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
 mov wc.lpfnWndProc,offset WndProc
 mov wc.cbClsExtra,NULL
 mov wc.cbWndExtra,NULL
 push hInst
 pop wc.hInstance
 mov wc.hbrBackground,COLOR_BTNFACE+1
 mov wc.lpszMenuName,NULL
 mov wc.lpszClassName,offset szClassName
 invoke LoadIcon,hInst,100
 mov wc.hIcon,eax
 invoke LoadCursor,NULL,IDC_ARROW
 mov wc.hCursor,eax
 mov wc.hIconSm,0
 invoke RegisterClassEx, ADDR wc
 invoke CreateWindowEx,NULL,ADDR szClassName,CTXT("更改'开始'按钮"),WS_OVERLAPPEDWINDOW,200,200,400,200,NULL,NULL,hInst,NULL
 mov hWnd,eax
 invoke ShowWindow,hWnd,SW_SHOWNORMAL
 invoke UpdateWindow,hWnd
 
 StartLoop:
  invoke GetMessage,ADDR msg,NULL,0,0
   cmp eax, 0
   je ExitLoop
    invoke TranslateMessage, ADDR msg
    invoke DispatchMessage, ADDR msg
   jmp StartLoop
 ExitLoop:
 
mov eax,msg.wParam
ret
WinMain endp
TimerProc   proc
;      invoke wsprintf,offset buffer,CTXT("."),NULL
      ;invoke MessageBeep,MB_OK
        dec Counter                          ;计数减1
        jnz NoKill                           ;到0了没
        invoke  KillTimer, NULL, TimerID      ;释放定时器
        invoke  PostQuitMessage,NULL
   NoKill:  
         ret               
   TimerProc   endp

WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
 .if uMsg==WM_CREATE
  ;invoke FindWindow ,CTEXT('Shell_TrayWnd'),NULL
 ; MOV Handle1,EAX
 ; invoke FindWindowEx ,Handle1,0,CTEXT("BUTTON"),NULL
 ;  mov     Handle2,eax
 ;  invoke SetWindowText,Handle2,CTEXT("121")
 ;  INVOKE UpdateWindow ,Handle2
 invoke  SetTimer, NULL, 0, 200, addr TimerProc  
     mov TimerID,eax                       
 .elseif uMsg == WM_DESTROY
  invoke PostQuitMessage,NULL
 .else
  invoke DefWindowProc,hWin,uMsg,wParam,lParam
 .endif
 ret
WndProc endp

END START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值