diff options
| author | Pietro Gagliardi <[email protected]> | 2015-04-07 01:33:26 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2015-04-07 01:33:26 -0400 |
| commit | dd8de11cc2b4601c6b6252c859d52b840ea801c3 (patch) | |
| tree | 51f55f4b953b8a4dc91628f63943313103d33a70 | |
| parent | ab936d304f593ab14853216ce3e77bba1e71d4f4 (diff) | |
More work on the Windows control hooking.
| -rw-r--r-- | new/newcontrol_windows.c (renamed from new/singlehandle_windows.c) | 29 | ||||
| -rw-r--r-- | new/ui_windows.h | 6 | ||||
| -rw-r--r-- | new/uipriv_windows.h | 10 |
3 files changed, 25 insertions, 20 deletions
diff --git a/new/singlehandle_windows.c b/new/newcontrol_windows.c index b55a8b9..0a46c0a 100644 --- a/new/singlehandle_windows.c +++ b/new/newcontrol_windows.c @@ -1,8 +1,15 @@ // 6 april 2015 #include "uipriv_windows.h" -// Common code for controls with a single window handle. -// The only method NOT defined is preferredSize(); this differs between controls. +typedef struct uiSingleHWNDControl uiSingleHWNDControl; + +struct uiSingleHWNDControl { + uiControl control; + HWND hwnd; + BOOL (*onWM_COMMAND)(uiControl *, WPARAM, LPARAM, void *, LRESULT *); + BOOL (*onWM_NOTIFY)(uiControl *, WPARAM, LPARAM, void *, LRESULT *); + void *onCommandNotifyData; +}; #define S(c) ((uiSingleHWNDControl *) (c)) @@ -17,6 +24,8 @@ void singleSetParent(uiControl *c, uintptr_t parentHWND) logLastError("error changing control parent in singleSetParent()"); } +// TODO preferred size + static void singleResize(uiControl *c, intmax_t x, intmax_t y, intmax_t width, intmax_t height, uiSizing *d) { if (MoveWindow(S(c)->hwnd, x, y, width, height, TRUE) == 0) @@ -33,18 +42,18 @@ static void singleContainerHide(uiControl *c) ShowWindow(S(c)->hwnd, SW_HIDE); } -uiSingleHWNDControl *newSingleHWNDControl(DWORD exstyle, const WCHAR *class, DWORD style, HINSTANCE hInstance) +uiControl *uiWindowsNewControl(uiWindowsNewControlParams *p) { uiSingleHWNDControl *c; c = uiNew(uiSingleHWNDControl); - c->hwnd = CreateWindowExW(exstyle, - class, L"", - style | WS_CHILD | WS_VISIBLE, + c->hwnd = CreateWindowExW(p->dwExStyle, + p->lpClassName, L"", + p->dwStyle | WS_CHILD | WS_VISIBLE, 0, 0, 100, 100, // TODO specify control IDs properly - initialParent, NULL, hInstance, NULL); + initialParent, NULL, p->hInstance, NULL); if (c->hwnd == NULL) logLastError("error creating control in newSingleHWNDControl()"); @@ -54,5 +63,9 @@ uiSingleHWNDControl *newSingleHWNDControl(DWORD exstyle, const WCHAR *class, DWO c->control.containerShow = singleContainerShow; c->control.containerHide = singleContainerHide; - return c; + c->onWM_COMMAND = p->onWM_COMMAND; + c->onWM_NOTIFY = p->onWM_NOTIFY; + c->onCommandNotifyData = p->onCommandNotifyData; + + return (uiControl *) c; } diff --git a/new/ui_windows.h b/new/ui_windows.h index eb68475..675f45b 100644 --- a/new/ui_windows.h +++ b/new/ui_windows.h @@ -21,8 +21,10 @@ struct uiWindowsNewControlParams { // ui redirects the message back and calls these functions. // Store the result in the LRESULT pointer and return TRUE to return the given result; return FALSE to pass the notification up to your window procedure. // Note that these are only issued if they come from the uiControl itself; notifications from children of the uiControl (such as a header control) will be received normally. - BOOL (*onWM_COMMAND)(uiControl *, WPARAM, LPARAM, LRESULT *); - BOOL (*onWM_NOTIFY)(uiControl *, WPARAM, LPARAM, LRESULT *); + BOOL (*onWM_COMMAND)(uiControl *, WPARAM, LPARAM, void *, LRESULT *); + BOOL (*onWM_NOTIFY)(uiControl *, WPARAM, LPARAM, void *, LRESULT *); + // This is the void * parameter to both of the above. + void *onCommandNotifyData; }; uiControl *uiWindowsNewControl(uiWindowsNewControlParams *); diff --git a/new/uipriv_windows.h b/new/uipriv_windows.h index 7f714ac..bdaf793 100644 --- a/new/uipriv_windows.h +++ b/new/uipriv_windows.h @@ -51,13 +51,3 @@ extern WCHAR *toUTF16(const char *); // window_windows.c extern ATOM registerWindowClass(HICON, HCURSOR); - -// singlehandle_windows.c -typedef struct uiSingleHWNDControl uiSingleHWNDControl; -struct uiSingleHWNDControl { - uiControl control; - HWND hwnd; - void (*voidEvent)(uiControl *, void *); - void *voidEventData; -}; -extern uiSingleHWNDControl *newSingleHWNDControl(DWORD, const WCHAR *, DWORD, HINSTANCE); |
