以下是代码片段: ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Programmed by 罗云彬, bigluo@telekbird.com.cn ; Website: http://asm.yeah.net ; LuoYunBin's Win32 ASM page (罗云彬的编程乐园) ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 版本信息 ; 汇编教程附带例子程序 - 定时器的使用 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 .model flat, stdcall option casemap :none ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Include 数据 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc include user32.inc include kernel32.inc include comctl32.inc include comdlg32.inc
includelib user32.lib includelib kernel32.lib includelib comctl32.lib includelib comdlg32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Equ 数据 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDI_MAIN equ 1 IDI_MOON1 equ 2 IDI_MOON2 equ 3 IDI_MOON3 equ 4 IDI_MOON4 equ 5 IDI_MOON5 equ 6 IDI_MOON6 equ 7 IDI_MOON7 equ 8 IDI_MOON8 equ 9
DLG_MAIN equ 1000 ID_MOON equ 1001
ID_TIMER1 equ 1 ID_TIMER2 equ 2 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 数据段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ? dwCounter1 dd ? dwCounter2 dd ? hIcon1 dd ? hIcon2 dd ? hIcon3 dd ? hIcon4 dd ? hIcon5 dd ? hIcon6 dd ? hIcon7 dd ? hIcon8 dd ? szBuffer db 256 dup (?)
.data
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 代码段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code ;******************************************************************** _ProcDlgMain proc uses ebx edi esi, \ hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
mov eax,wMsg ;******************************************************************** .if eax == WM_CLOSE invoke KillTimer,hWnd,ID_TIMER1 invoke KillTimer,hWnd,ID_TIMER2 invoke EndDialog,hWnd,NULL ;******************************************************************** .elseif eax == WM_INITDIALOG mov edi,offset hIcon1 mov ebx,IDI_MOON1 mov ecx,8 @@: push ecx invoke LoadIcon,hInstance,ebx cld stosd inc ebx pop ecx loop @B invoke SetTimer,hWnd,ID_TIMER1,500,NULL invoke SetTimer,hWnd,ID_TIMER2,200,NULL invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,hIcon1 ;******************************************************************** .elseif eax == WM_TIMER .if wParam == ID_TIMER1 inc dwCounter1 .if dwCounter1 == 8 mov dwCounter1,0 .endif mov eax,dwCounter1 shl eax,2 add eax,offset hIcon1 mov eax,[eax] invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,eax .else inc dwCounter2 .if dwCounter2 == 8 mov dwCounter2,0 .endif mov eax,dwCounter2 shl eax,2 add eax,offset hIcon1 mov eax,[eax] invoke SendDlgItemMessage,hWnd,ID_MOON,BM_SETIMAGE,IMAGE_ICON,eax .endif ;******************************************************************** .else mov eax,FALSE ret .endif mov eax,TRUE ret _ProcDlgMain endp ;******************************************************************** start: invoke GetModuleHandle,NULL mov hInstance,eax invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0 invoke ExitProcess,NULL ;******************************************************************** end start
|