// 11 april 2015 #include "uipriv_windows.hpp" struct uiLabel { uiWindowsControl c; HWND hwnd; }; uiWindowsControlAllDefaults(uiLabel) // via http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing #define labelHeight 8 static void uiLabelMinimumSize(uiWindowsControl *c, int *width, int *height) { uiLabel *l = uiLabel(c); uiWindowsSizing sizing; int y; *width = uiWindowsWindowTextWidth(l->hwnd); y = labelHeight; uiWindowsGetSizing(l->hwnd, &sizing); uiWindowsSizingDlgUnitsToPixels(&sizing, NULL, &y); *height = y; } char *uiLabelText(uiLabel *l) { return uiWindowsWindowText(l->hwnd); } void uiLabelSetText(uiLabel *l, const char *text) { uiWindowsSetWindowText(l->hwnd, text); // changing the text might necessitate a change in the label's size uiWindowsControlMinimumSizeChanged(uiWindowsControl(l)); } uiLabel *uiNewLabel(const char *text) { uiLabel *l; WCHAR *wtext; uiWindowsNewControl(uiLabel, l); wtext = toUTF16(text); l->hwnd = uiWindowsEnsureCreateControlHWND(0, L"static", wtext, // SS_LEFTNOWORDWRAP clips text past the end; SS_NOPREFIX avoids accelerator translation // controls are vertically aligned to the top by default (thanks Xeek in irc.freenode.net/#winapi) SS_LEFTNOWORDWRAP | SS_NOPREFIX, hInstance, NULL, TRUE); uiprivFree(wtext); return l; }