From 35e1f8e14c98807652d12f6213d7af70f6130bf6 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Mon, 6 Apr 2015 22:26:53 -0400 Subject: Started writing code for handling single-HWND controls on Windows. Similar code will exist for single-GtkWidget controls on GTK+ and single-NSView controls on Cocoa. --- new/singlehandle_windows.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 new/singlehandle_windows.c (limited to 'new/singlehandle_windows.c') diff --git a/new/singlehandle_windows.c b/new/singlehandle_windows.c new file mode 100644 index 0000000..a6e3960 --- /dev/null +++ b/new/singlehandle_windows.c @@ -0,0 +1,52 @@ +// 6 april 2015 +#include "tablepriv.h" + +// Common code for controls with a single window handle. +// The only method NOT defined is preferredSize(); this differs between controls. + +static uintptr_t singleHandle(uiControl *c) +{ + return (uintptr_t) (c->hwnd); +} + +//TODO void (*setParent)(uiControl *, uintptr_t); + +static void singleResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, intmax_t height, uiSizing *d) +{ + if (MoveWindow(c->hwnd, x, y, width, height, TRUE) == 0) + logLastError("error moving control in singleResize()"); +} + +static void singleContainerShow(uiControl *c) +{ + ShowWindow(c->hwnd, SW_SHOW); +} + +static void singleContainerHide(uiControl *c) +{ + ShowWindow(c->hwnd, SW_HIDE); +} + +uiSingleHWNDControl *newSingleHWNDControl(DWORD exstyle, const WCHAR *class, DWORD style, HWND parent, HINSTANCE hInstance) +{ + uiSingleHWNDControl *c; + + c = uiNew(uiSingleHWNDControl); + c->hwnd = CreateWindowExW(exstyle, + class, L"", + style | WS_CHILD | WS_VISIBLE, + 0, 0, + 100, 100, + // TODO specify control IDs properly + parent, NULL, hInstance, NULL); + if (c->hwnd == NULL) + logLastError("error creating control in newSingleHWNDControl()"); + + c->control.handle = singleHandle; +//TODO c->control.setParent = singleSetParent; + c->control.resize = singleResize; + c->control.containerShow = singleContainerShow; + c->control.containerHide = singleContainerHide; + + return c; +} -- cgit v1.2.3