Hi!
I experiment with the Windows GUI... Here a little example without MaxGUI:

WinAPI.bmx
InitCommonControlsEx for Progressbars a. s. o. can't linked together with the exe.
I hope, more examples can post here in this thread. (Please without MaxGUI)
cu olli
Edit: Now I know, I mustn't set the groupbox as parent of the radiobuttons.
I experiment with the Windows GUI... Here a little example without MaxGUI:
SuperStrict Framework PUB.Win32 Include "WinAPI.bmx" Const WINGUI_CLASS_NAME : String = "WinGUI Class" ' Menu-Entry IDs Const MENU_FILEOPEN : Int = 1 Const MENU_FILESAVE : Int = 2 Const MENU_EXIT : Int = 3 Const MENU_COPY : Int = 4 Const MENU_PASTE : Int = 5 Const MENU_MISC : Int = 6 Global Instance : Int Global WindowClass : WNDCLASSEX Global InitControls : TINITCOMMONCONTROLSEX Global Message : MSG Global Menu : Int Global FileMenu : Int Global EditMenu : Int Global Window : Int Global Button : Int Global Groupbox : Int Global Radiobuttons : Int[3] Global Label : Int Global Checkbox : Int Global Font : Int Global Textbox : Int Global Listbox : Int ' Get instance of desktop Instance = GetModuleHandleA(0) ' Register window class WindowClass = New WNDCLASSEX WindowClass.cbSize = SizeOf(WNDCLASSEX) WindowClass.Style = CS_HREDRAW .. | CS_VREDRAW .. | CS_OWNDC WindowClass.lpfnWndProc = MessageHandler WindowClass.cbClsExtra = 0 WindowClass.cbWndExtra = 0 WindowClass.hInstance = Instance WindowClass.hIcon = LoadIconA(Null, Byte Ptr(IDI_WINLOGO)) WindowClass.hCursor = LoadCursorA(Null, Byte Ptr(IDC_ARROW)) WindowClass.hbrBackground = GetStockObject(LTGRAY_BRUSH) WindowClass.lpszMenuName = Null WindowClass.lpszClassName = WINGUI_CLASS_NAME.ToCString() WindowClass.hIconSm = LoadIconA(Null, Byte Ptr(IDI_WINLOGO)) If Not RegisterClassExA(WindowClass) Then MessageBoxA(0, "Can't register window class.", "Error", .. MB_OK | MB_ICONEXCLAMATION) End EndIf ' Init common controls for more window classes Rem InitControls = New TINITCOMMONCONTROLSEX InitControls.dwSize = SizeOf(TINITCOMMONCONTROLSEX) InitControls.dwICC = ICC_PROGRESS_CLASS If Not InitCommonControlsEx(InitControls) Then MessageBoxA(0, "Can't load common controls.", "Error", .. MB_OK | MB_ICONEXCLAMATION) End EndIf End Rem ' Create popupmenu "File" FileMenu = CreatePopupMenu() AppendMenuA(FileMenu, MF_STRING, MENU_FILEOPEN, "Open...".ToCString()) AppendMenuA(FileMenu, MF_STRING | MF_DISABLED | MF_GRAYED, MENU_FILESAVE, .. "Save...".ToCString()) AppendMenuA(FileMenu, MF_SEPARATOR, 0, Null) AppendMenuA(FileMenu, MF_STRING, MENU_EXIT, "Exit".ToCString()) ' Create popupmenu "Edit" EditMenu = CreatePopupMenu() AppendMenuA(EditMenu, MF_STRING, MENU_COPY, "Copy".ToCString()) AppendMenuA(EditMenu, MF_STRING, MENU_PASTE, "Paste".ToCString()) AppendMenuA(EditMenu, MF_STRING | MF_CHECKED, MENU_MISC, "Misc".ToCString()) ' Create mainmenu Menu = CreateMenu_() AppendMenuA(Menu, MF_STRING | MF_POPUP, FileMenu, "File".ToCString()) AppendMenuA(Menu, MF_STRING | MF_POPUP, EditMenu, "Edit".ToCString()) ' Create window Window = CreateWindowExA(0, WINGUI_CLASS_NAME, "Main", WS_VISIBLE | .. WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, .. 400, 300, 0, Menu, Instance, Null) ' Create button Button = CreateWindowExA(0, "BUTTON", "Button", WS_VISIBLE | WS_CHILD | .. BS_PUSHBUTTON | BS_NOTIFY, 10, 10, 80, 25, Window, .. 0, Instance, Null) ' Create groupbox Groupbox = CreateWindowExA(0, "BUTTON", "Choose", WS_VISIBLE | WS_CHILD | .. BS_GROUPBOX, 100, 10, 150, 115, Window, 0, .. Instance, Null) ' Create radiobuttons Radiobuttons[0] = CreateWindowExA(0, "BUTTON", "One", WS_VISIBLE | WS_CHILD | .. BS_AUTORADIOBUTTON | WS_GROUP, 110, 35, 80, 15, .. Window, 0, Instance, Null) Radiobuttons[1] = CreateWindowExA(0, "BUTTON", "Two", WS_VISIBLE | WS_CHILD | .. BS_AUTORADIOBUTTON, 110, 55, 80, 15, .. Window, 0, Instance, Null) Radiobuttons[2] = CreateWindowExA(0, "BUTTON", "Three", WS_VISIBLE | WS_CHILD | .. BS_AUTORADIOBUTTON, 110, 75, 80, 15, .. Window, 0, Instance, Null) ' Create label Label = CreateWindowExA(0, "STATIC", "Case:", WS_VISIBLE | WS_CHILD, 110, 100, .. 80, 15, Window, 0, Instance, Null) ' Create checkbox Checkbox = CreateWindowExA(0, "BUTTON", "Check", WS_VISIBLE | WS_CHILD | .. BS_AUTOCHECKBOX, 260, 10, 120, 15, Window, 0, Instance, Null) ' Create textbox Textbox = CreateWindowExA(0, "EDIT", "ff", WS_VISIBLE | WS_CHILD | WS_VSCROLL | .. ES_MULTILINE | ES_AUTOVSCROLL, 10, 150, 240, 100, .. Window, 0, Instance, Null) ' Setting new font to textbox Font = CreateFontA(0, 0, 0, 0, FW_THIN, True, False, False, DEFAULT_CHARSET, .. OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, .. DEFAULT_PITCH, "Times New Roman") SendMessageA(Textbox, WM_SETFONT, Font, True) ' Setting the text indirect SendMessageA(textbox, WM_SETTEXT, 0, Int("Hello, world!".ToCString())) ' Create listbox Listbox = CreateWindowExA(0, "LISTBOX", "ff", WS_VISIBLE | WS_CHILD | LBS_NOTIFY, .. 260, 150, 120, 100, Window, 0, Instance, Null) ' Fill listbox SendMessage(Listbox, LB_ADDSTRING, Null, "One".ToCString()) SendMessage(Listbox, LB_ADDSTRING, Null, "Two".ToCString()) SendMessage(Listbox, LB_ADDSTRING, Null, "Three".ToCString()) Message = New MSG While GetMessageA(Message, 0, 0, 0) > 0 TranslateMessage(Message) DispatchMessageA(Message) Wend End Function MessageHandler:Int(hWnd:Int, msg:Int, wParam:Int, lParam:Int) Select msg Case WM_CLOSE DestroyWindow(hWnd) Case WM_DESTROY PostQuitMessage(0) Return 0 Case WM_COMMAND Select LOWORD(wParam) Case MENU_FILEOPEN MessageBoxA(0, "File -> Open", "Info", MB_OK | .. MB_ICONEXCLAMATION) Case MENU_FILESAVE MessageBoxA(0, "File -> Save", "Info", MB_OK | .. MB_ICONEXCLAMATION) Case MENU_EXIT PostQuitMessage(0) Return 0 Case MENU_COPY MessageBoxA(0, "Edit -> Copy", "Info", MB_OK | .. MB_ICONEXCLAMATION) Case MENU_PASTE MessageBoxA(0, "Edit -> Paste", "Info", MB_OK | .. MB_ICONEXCLAMATION) Case MENU_MISC If GetMenuState(EditMenu, MENU_MISC, MF_BYCOMMAND) & .. MF_CHECKED Then CheckMenuItem(EditMenu, MENU_MISC, MF_UNCHECKED) Else CheckMenuItem(EditMenu, MENU_MISC, MF_CHECKED) EndIf End Select Select lParam Case Button Select HIWORD(wParam) Case BN_CLICKED MessageBoxA(0, "Button -> Click", "Info", MB_OK | .. MB_ICONEXCLAMATION) Case BN_DBLCLK MessageBoxA(0, "Button -> Doubleclicked", "Info", .. MB_OK | MB_ICONEXCLAMATION) End Select Case Radiobuttons[0] SetWindowTextA(Label, "Case: 1") Case Radiobuttons[1] SetWindowTextA(Label, "Case: 2") Case Radiobuttons[2] SetWindowTextA(Label, "Case: 3") Case Listbox If HIWORD(wParam) = LBN_SELCHANGE Then Local Index:Int, Item:Byte Ptr Index = SendMessageA(Listbox, LB_GETANCHORINDEX, 0, 0) SetWindowTextA(Window, "Main "+(Index + 1)) EndIf End Select Default Return DefWindowProcA(hWnd, msg, wParam, lParam) End Select End Function Function HIWORD:Short(Value:Int) Return Short((Value Shr 16) & $FFFF) End Function Function LOWORD:Short(Value:Int) Return Short(Value & $FFFF) End Function
WinAPI.bmx
Const IDI_WINLOGO : Short = $32517 Const MB_OK : Int = $0 Const MB_ICONEXCLAMATION : Int = $30 Const LBS_NOTIFY : Int = $1 Const LB_ADDSTRING : Int = $180 Const LB_GETANCHORINDEX : Int = $19D Const LBN_SELCHANGE : Int = 1 Extern "Win32" Function RegisterClassExA:Int(lpwcx:Byte Ptr) Function SendMessage:Byte Ptr(hWnd:Int, msg:Int, wParam:Byte Ptr, lParam:Byte Ptr) .. = "SendMessageA@16" Function CreatePopupMenu:Int() Function CheckMenuItem:Int(hMenu:Int, uIDCheckItem:Int, uCheck:Int) Function GetMenuState:Int(hMenu:Int, uID:Int, uFlags:Int) Function CreateWindowExA:Int(dwExStyle:Int, lpClassName$z, lpWindowName$z, .. dwStyle:Int, x:Int, y:Int, nWidth:Int, nHeight:Int, .. hWndParent:Int, hMenu:Int, hInstance:Int, lpParam:Byte Ptr) Function MessageBoxA:Int(hWnd:Int, lpText$z, lpCaption$z, uType:Int) End Extern Type WNDCLASSEX Field cbSize : Int Field style : Int Field lpfnWndProc : Byte Ptr Field cbClsExtra : Int Field cbWndExtra : Int Field hInstance : Int Field hIcon : Int Field hCursor : Int Field hbrBackground : Int Field lpszMenuName : Byte Ptr Field lpszClassName : Byte Ptr Field hIconSm : Int End Type
InitCommonControlsEx for Progressbars a. s. o. can't linked together with the exe.
I hope, more examples can post here in this thread. (Please without MaxGUI)
cu olli
Edit: Now I know, I mustn't set the groupbox as parent of the radiobuttons.