cw_usedefault,300,200,null,null,\
hinst,null
mov hwnd,eax
invoke showwindow, hwnd,sw_shownormal
invoke updatewindow, hwnd
invoke getmenu,hwnd
mov hmenu,eax
.while true
invoke getmessage, addr msg,null,0,0
.break .if (!eax)
invoke translatemessage, addr msg
invoke dispatchmessage, addr msg
.endw
mov eax,msg.wparam
ret
winmain endp
wndproc proc hwnd:hwnd, umsg:uint, wparam:wparam, lparam:lparam
.if umsg==wm_create
invoke createevent,null,false,false,null
mov heventstart,eax
mov eax,offset threadproc
invoke createthread,null,null,eax,\
null,0,\
addr threadid
invoke closehandle,eax
.elseif umsg==wm_destroy
invoke postquitmessage,null
.elseif umsg==wm_command
mov eax,wparam
.if lparam==0
.if ax==idm_start_thread
invoke setevent,heventstart
invoke enablemenuitem,hmenu,idm_start_thread,mf_grayed
invoke enablemenuitem,hmenu,idm_stop_thread,mf_enabled
.elseif ax==idm_stop_thread
mov eventstop,true
invoke enablemenuitem,hmenu,idm_start_thread,mf_enabled
invoke enablemenuitem,hmenu,idm_stop_thread,mf_grayed
.else
invoke destroywindow,hwnd
.endif
.endif
.elseif umsg==wm_finish
invoke messagebox,null,addr successstring,addr appname,mb_ok
.else
invoke defwindowproc,hwnd,umsg,wparam,lparam
ret
.endif
xor eax,eax
ret
wndproc endp
threadproc proc uses ecx param:dword
invoke waitforsingleobject,heventstart,infinite
mov ecx,600000000
.while ecx!=0
.if eventstop!=true
add eax,eax