How To Create Window with CreateWindowEx ?

Miscellaneous Forums/Win32 Discussion/How To Create Window with CreateWindowEx ?

Here's one with some buttons and a keypress - you can press [ESC] to quit.

Import "-luser32"
Extern 
	Function GetSysColorBrush:Int(nIndex:Int) = "GetSysColorBrush@4"
	Function SendMessage:Int(hWnd:Int,MSG:Int,wParam:Int,lParam:Int) = "SendMessageA@16"
End Extern

Const COLOR_BTNFACE = 15

Local WinProcADDR:Byte Ptr = WinProc
If WinProcADDR > Null Then
	Print "winproc addr obtained "
EndIf

Local classname$ = "WindowCLASS"

Local class:WNDCLASS = New WNDCLASS
Local classADDR:Byte Ptr = Byte Ptr class 
class.hInstance = GetModuleHandleA(0)

class.lpfnWndProc = WinProcADDR

class.lpszClassName = Byte Ptr classname$


class.hbrBackground = GetSysColorBrush(COLOR_BTNFACE) 

If(RegisterClassA(classADDR) <> Null) Then
	Print "class reg ok"
EndIf

Local message:MSG = New MSG
Local messageADDR:Byte Ptr = Byte Ptr message

Local windowTitle$ = "Testing"

Const WS_CAPTION = $C00000
Const WS_SYSMENU = $80000
Const WS_VISIBLE = $10000000
Const WS_MINIMIZEBOX = $20000
Const WS_MAXIMIZEBOX = $10000

Const WS_CHILD           = $40000000



Const WM_DESTROY = 2

Const WM_KEYDOWN = $100

Const WM_COMMAND = $111



Local lpParamADDR:Byte Ptr



Local window = CreateWindowExA( 0,Byte Ptr classname$,Byte Ptr windowTitle$,WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU | WS_VISIBLE,100,100,400,350,0,0,GetModuleHandleA(0),lpParamADDR )



Global  btnOk = CreateWindowExA( 0 ,Byte Ptr "BUTTON",Byte Ptr "Ok",WS_CHILD | WS_VISIBLE,250,250,100,20,window ,0,GetModuleHandleA(0),lpParamADDR )
Global  btnCancel = CreateWindowExA( 0 ,Byte Ptr "BUTTON",Byte Ptr "Cancel",WS_CHILD | WS_VISIBLE,250,250+24,100,20,window ,0,GetModuleHandleA(0),lpParamADDR )





While Not KeyDown(KEY_ESCAPE) 
	GetMessageA(messageADDR,0,0,0)
	TranslateMessage(messageADDR)
	DispatchMessageA(messageADDR)
Wend 


'
'
'
Function WinProc(hWnd:Int,Msg:Int,wParam:Int,lParam:Int)
	
	Select Msg
		
		Case WM_DESTROY
		'	Notify "Bye!"
			End
		Case WM_KEYDOWN
		
			DebugLog "Keydown " + wParam + " " + lParam
			
			Select wParam
				Case 27 ' ESC
				
					SendMessage hWnd,WM_DESTROY,0,0
			End Select
			
		
		Case WM_COMMAND
		
			Select lParam
				Case  btnOk
					Notify "You clicked Ok"
				Case btnCancel
					Notify "You clicked Cancel"
			
			End Select
			
		Default
			'DebugLog Msg
		
			
	End Select
	
	Return DefWindowProcA(hWnd,Msg,wParam,lParam)
	
End Function