--- a/ui/win32/toolkit.c Sun Oct 19 21:20:08 2025 +0200 +++ b/ui/win32/toolkit.c Mon Nov 10 21:52:51 2025 +0100 @@ -123,4 +123,34 @@ void ui_show(UiObject *obj) { ui_set_visible(obj->widget, TRUE); +} + +LRESULT CALLBACK ui_default_eventproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { + W32Widget *widget = (W32Widget*)GetWindowLongPtr(hwnd, GWLP_USERDATA); + if (widget && widget->wclass->eventproc) { + widget->wclass->eventproc(widget, hwnd, uMsg, wParam, lParam); + } + switch(uMsg) { + case WM_DESTROY: { + PostQuitMessage(0); + break; + } + case WM_COMMAND: { + HWND hwndCtrl = (HWND)lParam; + W32Widget *cmdWidget = (W32Widget*)GetWindowLongPtr(hwndCtrl, GWLP_USERDATA); + if (cmdWidget && cmdWidget->wclass->eventproc) { + cmdWidget->wclass->eventproc(cmdWidget, hwnd, uMsg, wParam, lParam); + } + } + case WM_SIZE: { + int width = LOWORD(lParam); + int height = HIWORD(lParam); + if (widget->layout) { + widget->layout(widget->layoutmanager, width, height); + } + break; + } + default: return DefWindowProc(hwnd, uMsg, wParam, lParam); + } + return 0; } \ No newline at end of file