diff options
| author | Pietro Gagliardi <[email protected]> | 2014-08-01 19:15:03 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-08-01 19:15:03 -0400 |
| commit | 785d6ac4fd6d60113c0ad37b9b5cfbbe5b7f4abc (patch) | |
| tree | 901fbeaee1ba4b9434519f04738f3d66e95a3980 | |
| parent | b31ce95b3315c2b6567ed96c3e424e5c2a5e67f4 (diff) | |
Added a function to the Windows backend to keep track of text length. This will be important for sizing purposes.
| -rw-r--r-- | redo/sizing_windows.c | 21 | ||||
| -rw-r--r-- | redo/winapi_windows.h | 3 |
2 files changed, 24 insertions, 0 deletions
diff --git a/redo/sizing_windows.c b/redo/sizing_windows.c index 133cbcc..e6f27a6 100644 --- a/redo/sizing_windows.c +++ b/redo/sizing_windows.c @@ -38,3 +38,24 @@ void moveWindow(HWND hwnd, int x, int y, int width, int height) if (MoveWindow(hwnd, x, y, width, height, TRUE) == 0) xpanic("error setting window/control rect", GetLastError()); } + +LONG controlTextLength(HWND hwnd, LPWSTR text) +{ + HDC dc; + HFONT prev; + SIZE size; + + dc = GetDC(hwnd); + if (dc == NULL) + xpanic("error getting DC of control for text length", GetLastError()); + prev = SelectObject(dc, controlFont); + if (prev == NULL) + xpanic("error setting control font to DC for text length", GetLastError()); + if (GetTextExtentPoint32W(dc, text, wcslen(text), &size) == 0) + xpanic("error actually getting text length", GetLastError()); + if (SelectObject(dc, prev) != controlFont) + xpanic("error restoring previous control font to DC for text length", GetLastError()); + if (ReleaseDC(hwnd, dc) == 0) + xpanic("error releasing DC of control for text length", GetLastError()); + return size.cx; +} diff --git a/redo/winapi_windows.h b/redo/winapi_windows.h index 4bd035c..12e5ddf 100644 --- a/redo/winapi_windows.h +++ b/redo/winapi_windows.h @@ -18,6 +18,8 @@ #include <commctrl.h> #include <stdint.h> #include <uxtheme.h> +#include <string.h> +#include <wchar.h> /* global messages unique to everything */ enum { @@ -68,6 +70,7 @@ extern int baseX; extern int baseY; extern void calculateBaseUnits(HWND); extern void moveWindow(HWND, int, int, int, int); +extern LONG controlTextLength(HWND, LPWSTR); /* window_windows.c */ extern DWORD makeWindowWindowClass(char **); |
