hWnd				dd	?
wMsg				dd	?
wParam				dd	?
lParam				dd	?

_WM_ACTIVATE			dd	?
_WM_ACTIVATEAPP 		dd	?
_WM_CANCELMODE			dd	?
_WM_CHILDACTIVATE		dd	?
_WM_CLOSE			dd	?
_WM_COMMAND			dd	?
_WM_COMPACTING			dd	?
_WM_COPYDATA			dd	?
_WM_CREATE			dd	?
_WM_DESTROY			dd	?
_WM_ENABLE			dd	?
_WM_ENTERSIZEMOVE		dd	?
_WM_EXITSIZEMOVE		dd	?
_WM_GETICON			dd	?
_WM_GETMINMAXINFO		dd	?
_WM_GETTEXT			dd	?
_WM_GETTEXTLENGTH		dd	?
_WM_INITDIALOG			dd	?
_WM_INPUTLANGCHANGE		dd	?
_WM_INPUTLANGCHANGEREQUEST	dd	?
_WM_MOVE			dd	?
_WM_MOVING			dd	?
_WM_NCACTIVATE			dd	?
_WM_NCCALCSIZE			dd	?
_WM_NCCREATE			dd	?
_WM_NCDESTROY			dd	?
_WM_PARENTNOTIFY		dd	?
_WM_POWER			dd	?
_WM_QUERYDRAGICON		dd	?
_WM_QUERYOPEN			dd	?
_WM_QUIT			dd	?
_WM_SETICON			dd	?
_WM_SETTEXT			dd	?
_WM_SETTINGCHANGE		dd	?
_WM_SHOWWINDOW			dd	?
_WM_SIZE			dd	?
_WM_SIZING			dd	?
_WM_STYLECHANGED		dd	?
_WM_STYLECHANGING		dd	?
_WM_USERCHANGED 		dd	?
_WM_WINDOWPOSCHANGED		dd	?
_WM_WINDOWPOSCHANGING		dd	?
_WM_WININICHANGE		dd	?
_END				dd	0xFFFFFFFF

proc WndProc, hwnd, wmsg, wparam, lparam
     enter
     push    ebx esi edi

     mov     eax,[hwnd]
     mov     [hWnd],eax
     mov     eax,[wmsg]
     mov     [wMsg],eax
     mov     eax,[wparam]
     mov     [wParam],eax
     mov     eax,[lparam]
     mov     [lParam],eax

     mov     esi,_WM_ACTIVATE
@@:
     lodsd
     cmp eax,0x0
     je @B
     cmp eax,0xFFFFFFFF
     je wmBYE
     call eax
wmBYE:
     xor     eax,eax
     pop     edi esi ebx
     return
endp