diff options
| author | Pietro Gagliardi <[email protected]> | 2014-08-22 13:57:32 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-08-22 13:57:32 -0400 |
| commit | c7268f8feed749a385d171409ac99430d88d348a (patch) | |
| tree | 8c8185e6b054626a0d53c1a42efff41ba1481e47 /redo/area_windows.c | |
| parent | 93b1d3428a3102d92064bd9362405f1e4250a35d (diff) | |
Began implementing Area.OpenTextFieldAt() on Windows.
Diffstat (limited to 'redo/area_windows.c')
| -rw-r--r-- | redo/area_windows.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/redo/area_windows.c b/redo/area_windows.c index 7e49bff..8985c04 100644 --- a/redo/area_windows.c +++ b/redo/area_windows.c @@ -438,3 +438,37 @@ HWND newArea(void *data) xpanic("container creation failed", GetLastError()); return hwnd; } + +static LRESULT CALLBACK areaTextFieldSubProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR id, DWORD_PTR data) +{ + switch (uMsg) { + case WM_KILLFOCUS: + ShowWindow(hwnd, SW_HIDE); + return (*fv_DefSubclassProc)(hwnd, uMsg, wParam, lParam); + case WM_NCDESTROY: + if ((*fv_RemoveWindowSubclass)(hwnd, areaTextFieldSubProc, id) == FALSE) + xpanic("error removing Area TextField subclass (which was for handling WM_KILLFOCUS)", GetLastError()); + return (*fv_DefSubclassProc)(hwnd, uMsg, wParam, lParam); + default: + return (*fv_DefSubclassProc)(hwnd, uMsg, wParam, lParam); + } + xmissedmsg("Area TextField", "areaTextFieldSubProc()", uMsg); + return 0; // unreached +} + +HWND newAreaTextField(HWND area) +{ + HWND tf; + + tf = CreateWindowExW(textfieldExtStyle | WS_EX_TOOLWINDOW, + L"edit", L"", + textfieldStyle | WS_POPUP, + 0, 0, 0, 0, + area, // owner window + NULL, hInstance, NULL); + if (tf == NULL) + xpanic("error making Area TextField", GetLastError()); + if ((*fv_SetWindowSubclass)(tf, areaTextFieldSubProc, 0, (DWORD_PTR) NULL) == FALSE) + xpanic("error subclassing Area TextField to give it its own WM_KILLFOCUS handler", GetLastError()); + return tf; +} |
