ui/win32/container.c

changeset 115
e57ca2747782
parent 113
dde28a806552
--- a/ui/win32/container.c	Sun Dec 07 20:00:33 2025 +0100
+++ b/ui/win32/container.c	Sat Dec 13 15:58:58 2025 +0100
@@ -35,7 +35,7 @@
 
 
 static W32WidgetClass grid_layout_widget_class = {
-    .eventproc = NULL,
+    .eventproc = ui_grid_widget_event,
     .enable = NULL,
     .show = w32_widget_default_show,
     .get_preferred_size = ui_grid_layout_get_preferred_size,
@@ -62,6 +62,18 @@
     ctn->container.newline = FALSE;
 }
 
+int ui_grid_widget_event(W32Widget *widget, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
+    if (uMsg == WM_ERASEBKGND) {
+        HDC hdc = (HDC)wParam;
+        UiGridWidget *grid = (UiGridWidget*)widget;
+        RECT rc;
+        GetClientRect(hwnd, &rc);
+        FillRect(hdc, &rc, grid->brush);
+        return 1;
+    }
+    return 0;
+}
+
 W32Size ui_grid_layout_get_preferred_size(W32Widget *widget) {
     UiGridLayout *grid = widget->layoutmanager;
     W32Size size;
@@ -134,26 +146,27 @@
             TEXT("STATIC"),
             NULL,
             WS_CHILD | WS_VISIBLE,
-            0, 0, 100, 100,
+            0, 0, 300, 300,
             parent,
             NULL,
             hInstance,
             NULL);
     SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)ui_default_eventproc);
 
-    W32Widget *widget = w32_widget_new(&grid_layout_widget_class, hwnd);
-    ui_container_add(container, widget, &layout);
+    UiGridWidget *widget = w32_widget_create(&grid_layout_widget_class, hwnd, sizeof(UiGridWidget));
+    ui_container_add(container, (W32Widget*)widget, &layout);
 
     UiContainerX *gridContainer = ui_grid_container_create(obj, hwnd, args->columnspacing, args->rowspacing, INSETS_ZERO);
     uic_object_push_container(obj, gridContainer);
 
     UiGridLayoutContainer *grid = (UiGridLayoutContainer*)gridContainer;
-    widget->layout = (W32LayoutFunc)ui_grid_layout;
-    widget->layoutmanager = grid->layout;
+    widget->widget.layout = (W32LayoutFunc)ui_grid_layout;
+    widget->widget.layoutmanager = grid->layout;
+    widget->brush = GetSysColorBrush(COLOR_BTNFACE);
     grid->layout->preferred_width = 200;
     grid->layout->preferred_height = 200;
 
-    return widget;
+    return (W32Widget*)widget;
 }
 
 UiContainerX* ui_grid_container_create(UiObject *obj, HWND hwnd, short columnspacing, short rowspacing, GridEdgeInsets padding) {

mercurial