--- a/ui/win32/window.c Sun Dec 07 20:00:33 2025 +0100 +++ b/ui/win32/window.c Sat Dec 13 15:58:58 2025 +0100 @@ -39,6 +39,7 @@ #include <stdlib.h> #include "win32.h" +#include "menu.h" static W32WidgetClass w32_toplevel_widget_class = { .eventproc = ui_window_widget_event, @@ -54,9 +55,9 @@ void ui_window_init(void) { - hInstance = GetModuleHandle(NULL); - - WNDCLASSEX wc = { sizeof(WNDCLASSEX) }; + hInstance = GetModuleHandle(NULL); + + WNDCLASSEX wc = { sizeof(WNDCLASSEX) }; wc.lpfnWndProc = ui_default_eventproc; wc.hInstance = hInstance; wc.lpszClassName = mainWindowClass; @@ -69,49 +70,59 @@ } } -static UiObject* create_window(const char *title, void *window_data, bool simple) { +static UiObject* create_window(const char *title, bool simple) { UiObject *obj = uic_object_new_toplevel(); - obj->window = window_data; - HWND hwnd = CreateWindowExA( - 0, - "UiMainWindow", - title, - WS_OVERLAPPEDWINDOW, + HWND hwnd = CreateWindowExA( + 0, + "UiMainWindow", + title, + WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, - 800, - 600, + 800, + 600, + NULL, NULL, - NULL, - hInstance, - NULL); + hInstance, + NULL); + + if (!simple) { + HMENU menubar = ui_create_main_menu(obj); + if (menubar) { + SetMenu(hwnd, menubar); + } + } UpdateWindow(hwnd); - UiContainerX *container = ui_box_container_create(obj, hwnd, UI_BOX_VERTICAL, 0, INSETS_ZERO); - uic_object_push_container(obj, container); - UiBoxContainer *box = (UiBoxContainer*)container; + UiContainerX *container = ui_box_container_create(obj, hwnd, UI_BOX_VERTICAL, 0, INSETS_ZERO); + uic_object_push_container(obj, container); + UiBoxContainer *box = (UiBoxContainer*)container; - UiWindow *widget = w32_widget_create(&w32_toplevel_widget_class, hwnd, sizeof(UiWindow)); - widget->obj = obj; - widget->widget.layout = (W32LayoutFunc)ui_grid_layout; - widget->widget.layoutmanager = box->layout; - obj->widget = (W32Widget*)widget; - obj->ref = 1; + UiWindow *widget = w32_widget_create(&w32_toplevel_widget_class, hwnd, sizeof(UiWindow)); + widget->obj = obj; + widget->widget.layout = (W32LayoutFunc)ui_grid_layout; + widget->widget.layoutmanager = box->layout; + obj->widget = (W32Widget*)widget; + obj->ref = 1; - return obj; + return obj; } -UiObject *ui_window(const char *title, void *window_data) { - return create_window(title, window_data, FALSE); +UiObject *ui_window(const char *title) { + return create_window(title, FALSE); } +UiObject *ui_simple_window(const char *title) { + return create_window(title, TRUE); +} -void ui_window_widget_event(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - //UiWindow *window = (UiWindow*)widget; +int ui_window_widget_event(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + //UiWindow *window = (UiWindow*)widget; + return 0; } void ui_window_widget_show(W32Widget *w, BOOLEAN show) { - ShowWindow(w->hwnd, show ? SW_SHOWNORMAL : SW_HIDE); + ShowWindow(w->hwnd, show ? SW_SHOWNORMAL : SW_HIDE); }