format PE GUI 4.0

include '%fasminc%\win32a.inc'
entry start

DEVICE_FONTTYPE         = 0x2

; +--------------+
; | data section |
; +--------------+
section '.data' data readable writeable
	wndClsName	db 'TUTORIAL01',0
	wndTitle	db '',0
	wndH		dd ?
	insH		dd ?

	wndCls		WNDCLASS
	wndMsg		MSG

	parentH		dd ?

	dcH		dd ?
	lbFontH		dd ?
	sInfoH		dd ?
	fontInfo	LOGFONT
	fontName	rb 36

	buf	rb 0xFF
	f1	db '%X',0

; +--------------+
; | code section |
; +--------------+
section '.code' code readable executable
start:
	invoke	GetModuleHandle,NULL
		mov  [insH],eax
	invoke	DialogBoxParam,eax,DLG_MAIN,NULL,proc_dialog,NULL
	invoke	ExitProcess,0

;  -------------
;   proc_dialog
;  -------------
   proc	proc_dialog,hDlg,uMsg,wParam,lParam
			cmp  [uMsg],WM_COMMAND
			je   .wmCOMMAND
			cmp  [uMsg],WM_INITDIALOG
			je   .wmINITDIALOG
			cmp  [uMsg],WM_CLOSE
			je   .wmCLOSE
			jmp  .wmBYE

	.wmCLOSE:
		invoke	EndDialog,[hDlg],0
			jmp  .wmBYE

	.wmINITDIALOG:
		invoke	GetDlgItem,[hDlg],MAIN_LBFONT
			mov  [lbFontH],eax
		invoke	GetDlgItem,[hDlg],MAIN_SINFO
			mov  [sInfoH],eax

		invoke	GetDC,[hDlg]
			mov  [dcH],eax

			mov  [fontInfo.lfCharSet],ANSI_CHARSET
			mov  [fontInfo.lfFaceName],0
		invoke	EnumFontFamiliesEx,[dcH],fontInfo,callback_enumFontFamiliesEx,NULL,0
		invoke	ReleaseDC,[hDlg],[dcH]
			jmp  .wmBYE

	.wmCOMMAND:
			cmp  [wParam],LBN_SELCHANGE shl 16 or MAIN_LBFONT
			jne  @f
		invoke	SendMessage,[lbFontH],LB_GETCURSEL,0,0
		invoke	SendMessage,[lbFontH],LB_GETTEXT,eax,fontName
		invoke	SendMessage,[sInfoH],WM_SETTEXT,0,fontName
		@@:
			jmp  .wmBYE
	.wmBYE:
		return
   endp

;  -----------------------------
;   callback_enumFontFamiliesEx
;  -----------------------------
   proc callback_enumFontFamiliesEx,flData,fpData,fType,lParam
		cmp  [fType],DEVICE_FONTTYPE
		je   @f
		mov  eax,[flData]
		add  eax,ENUMLOGFONTEX.elfLogFont.lfFaceName
	invoke	SendMessage,[lbFontH],LB_ADDSTRING,0,eax
	@@:
		mov  eax,1
		return
   endp

; +----------------+
; | import section |
; +----------------+
section '.idata' import data readable
	library	kernel32, 'KERNEL32.DLL',\
		user32,   'USER32.DLL',\
		gdi32,    'GDI32.DLL'

	include '%fasminc%\apia\Kernel32.inc'
	include '%fasminc%\apia\User32.inc'
	include '%fasminc%\apia\Gdi32.inc'

; +------------------+
; | resource section |
; +------------------+
section '.rsrc' resource data readable
DLG_MAIN	= 30
	MAIN_LBFONT	= 3001
	MAIN_SINFO	= 3002

	directory RT_DIALOG,appDialog

	resource  appDialog,\
		  DLG_MAIN,LANG_NEUTRAL,dlgMain

	dialog	dlgMain,'Win32 Tutorial 1, Font',0,0,123,140,\
		DS_MODALFRAME + WS_VISIBLE + WS_CAPTION + WS_POPUP + WS_SYSMENU
		dialogitem      'LISTBOX','',MAIN_LBFONT,7,18,107,110,LBS_STANDARD + WS_VISIBLE + WS_TABSTOP
		dialogitem      'STATIC','Font List :',0,7,7,32,10,SS_LEFT + WS_VISIBLE
		dialogitem      'STATIC','',MAIN_SINFO,7,122,107,11,SS_SUNKEN + WS_VISIBLE + SS_LEFT
	enddialog