invoke createwindowex,ws_ex_clientedge,addr classname,addr appname,\
ws_overlapped+ws_caption+ws_sysmenu+ws_minimizebox+ws_maximizebox+ws_visible,cw_usedefault,\
cw_usedefault,350,200,null,null,\
hinst,null
mov hwnd,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
local pt:point
.if umsg==wm_create
invoke createpopupmenu
mov hpopupmenu,eax
invoke appendmenu,hpopupmenu,mf_string,idm_restore,addr restorestring
invoke appendmenu,hpopupmenu,mf_string,idm_exit,addr exitstring
.elseif umsg==wm_destroy
invoke destroymenu,hpopupmenu
invoke postquitmessage,null
.elseif umsg==wm_size
.if wparam==size_minimized
mov note.cbsize,sizeof notifyicondata
push hwnd
pop note.hwnd
mov note.uid,idi_tray
mov note.uflags,nif_icon+nif_message+nif_tip
mov note.ucallbackmessage,wm_shellnotify
invoke loadicon,null,idi_winlogo
mov note.hicon,eax
invoke lstrcpy,addr note.sztip,addr appname
invoke showwindow,hwnd,sw_hide
invoke shell_notifyicon,nim_add,addr note
.endif
.elseif umsg==wm_command
.if lparam==0
invoke shell_notifyicon,nim_delete,addr note
mov eax,wparam
.if ax==idm_restore
invoke showwindow,hwnd,sw_restore
.else
invoke destroywindow,hwnd
.endif
.endif
.elseif umsg==wm_shellnotify
.if wparam==idi_tray
.if lparam==wm_rbuttondown
invoke getcursorpos,addr pt
invoke setforegroundwindow,hwnd
invoke trackpopupmenu,hpopupmenu,tpm_rightalign,pt.x,pt.y,null,hwnd,null
invoke postmessage,hwnd,wm_null,0,0