Via the Suggestion Box, commenter Twisted Combo responds to an old blog entry on why the size of a combo box includes the height of the drop-down by asking, But how do I *get* the dropped down height?”
By using the deviously-named
CB_GETDROPPEDCONTROLRECT
message,
which the windowsx.h
header file wraps inside
the
ComboBox_GetDroppedControlRect
macro.
Start with the scratch program and make these changes:
BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpcs) { g_hwndChild = CreateWindow( TEXT("combobox"), NULL, WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWN, 0, 0, 500, 500, hwnd, (HMENU)1, g_hinst, 0); ComboBox_AddString(g_hwndChild, TEXT("First")); ComboBox_AddString(g_hwndChild, TEXT("Second")); ComboBox_AddString(g_hwndChild, TEXT("Third")); ComboBox_AddString(g_hwndChild, TEXT("Fourth")); TCHAR szBuf[200]; RECT rcWindow; GetWindowRect(g_hwndChild, &rcWindow); RECT rcDrop; ComboBox_GetDroppedControlRect(g_hwndChild, &rcDrop); wsprintf(szBuf, TEXT("window height %d, dropdown height %d"), rcWindow.bottom - rcWindow.top, rcDrop.bottom - rcDrop.top); SetWindowText(hwnd, szBuf); return TRUE; }
The actual results will naturally vary depending on your system configuration, but when I ran this program, the window caption said “24 / 500”.
0 comments