How do I get the dropped height of a combo box?

Raymond Chen

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”.