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