
format PE GUI 4.0
include '%fasminc%\win32a.inc'

entry start

section '.data' data readable writeable
	wndClsName	db 'Test',0
	wndTitle	db 'TestWindow',0
	insH		dd ?
	wndH		dd ?
	appH		dd ?
	hWnd		dd ?
	wndMsg		MSG
	wndCls		WNDCLASS 0,proc_window,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,wndClsName

section '.code' code readable executable
start:
	invoke	GetModuleHandle,NULL
		mov  [insH],eax
		mov  [wndCls.lpszMenuName],M_MAIN
	invoke	RegisterClass,wndCls
	invoke	CreateWindowEx,NULL,wndClsName,wndTitle,WS_SYSMENU+WS_MINIMIZEBOX+WS_VISIBLE,0,0,300,100,NULL,NULL,[insH],NULL
		mov  [hWnd],eax

window_message_loop_start:
	invoke	GetMessage,wndMsg,NULL,0,0
		or   eax,eax
		je   window_message_loop_end
	invoke	TranslateMessage,wndMsg
	invoke	DispatchMessage,wndMsg
		jmp  window_message_loop_start
window_message_loop_end:
	invoke	ExitProcess,0


proc proc_window,hWnd,uMsg,wParam,lParam
		push ebx esi edi
		cmp  [uMsg],WM_CLOSE
		je   .wmCLOSE
		cmp  [uMsg],WM_DESTROY
		je   .wmDESTROY
	.wmDEFAULT:
		invoke	DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
		jmp  .wmBYE


	.wmCLOSE:
		invoke	DestroyWindow,[hWnd]
			jmp  .wmBYE

	.wmDESTROY:
		invoke	PostQuitMessage,0

	.wmBYE:
		pop  edi esi ebx
		ret
endp

section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
	user32,  'USER32.DLL',\
	gdi32,	 'GDI32.DLL',\
	comdlg32,'COMDLG32.DLL'

include '%fasminc%\apia\Kernel32.inc'
include '%fasminc%\apia\User32.inc'
include '%fasminc%\apia\Gdi32.inc'
include '%fasminc%\apia\Comdlg32.inc'

section '.rsrc' resource data readable
M_MAIN			= 30
      MI_OPEN		= 1000
      MI_SAVE		= 1001
      MI_SAVEAS 	= 1002
      MI_EXIT		= 1003
      MI_CUT		= 1100
      MI_PREF		= 1101

directory	RT_MENU,_appMenu

resource	_appMenu,M_MAIN,LANG_NEUTRAL,_menuMain

menu _menuMain
	menuitem '&File',0,MFR_POPUP
	menuitem	'&Open',MI_OPEN,0
	menuitem	'&Save...',MI_SAVE,0
	menuitem	'Save&As...',MI_SAVEAS,0
	menuseparator
	menuitem	'E&xit',MI_EXIT,MFR_END
	menuitem '&Edit',0,MFR_POPUP
	menuitem	'Cu&t',MI_CUT,0
	menuitem	'&Preferences...',MI_PREF,MFR_END
