From 785d6ac4fd6d60113c0ad37b9b5cfbbe5b7f4abc Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Fri, 1 Aug 2014 19:15:03 -0400 Subject: [PATCH] Added a function to the Windows backend to keep track of text length. This will be important for sizing purposes. --- redo/sizing_windows.c | 21 +++++++++++++++++++++ redo/winapi_windows.h | 3 +++ 2 files changed, 24 insertions(+) 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 #include #include +#include +#include /* 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 **);