Таймер срабатывает 2 раза

Тема в разделе "WASM.WIN32", создана пользователем CSS, 12 янв 2005.

  1. CSS

    CSS New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2005
    Сообщения:
    2
    Использую в проге таймер, и он по непонятным причинам срабатывает 2 раза, в отладчике смотрю код, всё нармально но срабатыает 2 раза:)

    Точнеее работает один раз но MessageBox после нажатия Ок вызывается ещё раз.

    исходник ниже
    Код (Text):
    1.  
    2. .586
    3. .model flat,stdcall
    4. .nolist
    5. option casemap:none
    6.  
    7.    include windows.inc
    8.    include user32.inc
    9.    include kernel32.inc
    10.    
    11.    includelib user32.lib
    12.    includelib kernel32.lib
    13.  
    14. TimerProc     PROTO  :DWORD
    15. WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    16.  
    17. .data
    18. .list
    19.    ClassName db "MainWinClass",0
    20.    AppName  db "Main Window",0
    21.  
    22.    szBoxText                 db   "blablabla",0
    23.    szBoxTitle                db   "!!!",0
    24.  
    25. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    26.     LOCAL wc:WNDCLASSEX
    27.     LOCAL msg:MSG
    28.     LOCAL hwnd:HWND
    29.    
    30.     mov   wc.cbSize,SIZEOF WNDCLASSEX
    31.     mov   wc.style, CS_HREDRAW or CS_VREDRAW
    32.     mov   wc.lpfnWndProc, OFFSET WndProc
    33.     mov   wc.cbClsExtra,NULL
    34.     mov   wc.cbWndExtra,NULL
    35.     push  hInstance
    36.     pop   wc.hInstance
    37.     mov   wc.hbrBackground,COLOR_BTNFACE+1
    38.     mov   wc.lpszMenuName,NULL
    39.     mov   wc.lpszClassName,OFFSET ClassName
    40.    
    41.     invoke LoadIcon,NULL,IDI_APPLICATION
    42.     mov   wc.hIcon,eax
    43.     mov   wc.hIconSm,eax
    44.    
    45.     invoke LoadCursor,NULL,IDC_ARROW
    46.     mov   wc.hCursor,eax
    47.    
    48.     invoke RegisterClassEx, addr wc
    49.     INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
    50.            WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
    51.            CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
    52.            hInst,NULL
    53.     mov   hwnd,eax
    54.    
    55.     invoke ShowWindow, hwnd,SW_HIDE
    56.     invoke UpdateWindow, hwnd
    57.    
    58.    
    59.  
    60.  
    61. ; Ставлю таймер
    62. invoke SetTimer,NULL,NULL,10000,offset TimerProc   
    63.    
    64.     .WHILE TRUE
    65.         invoke GetMessage, ADDR msg,NULL,0,0
    66.         .BREAK .IF (!eax)
    67.         invoke TranslateMessage, ADDR msg
    68.         invoke DispatchMessage, ADDR msg
    69.     .ENDW
    70.    
    71.     mov     eax,msg.wParam
    72.     ret
    73. WinMain endp
    74.  
    75. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    76.    
    77.     .IF uMsg==WM_DESTROY
    78.         invoke PostQuitMessage,NULL
    79.     .ELSEIF uMsg==WM_CREATE
    80.         ;
    81.     .ELSE
    82.         invoke DefWindowProc,hWnd,uMsg,wParam,lParam       
    83.         ret
    84.     .ENDIF
    85.    
    86.     xor eax,eax
    87.     ret
    88. WndProc endp
    89.  
    90.  
    91. TimerProc    proc     Param:DWORD
    92.              
    93.          invoke   MessageBox, NULL, addr szBoxText, addr szBoxTitle, MB_OK
    94.          ret
    95.              
    96. TimerProc   endp
    97. end start
    98.  
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine