CComboBoxEx проблемы с разным DPI, расчет высоты - PullRequest
1 голос
/ 02 ноября 2010

Я хочу добавить CComboBoxEx в мою форму, но я должен выровнять его с другими элементами управления и сделать его такой же высоты.

Проблема в том, что я не могу найти правильный способ получить высоту этого элемента управления.

Если я установлю прямоугольник окна, это повлияет на выпадающий список. Если я установлю фиксированный размер, а содержимое внутри комбо будет выше, элемент управления будет обрезан внизу.

Есть ли способ рассчитать, насколько большим будет ComboBoxEx, основываясь на изображении и текущих настройках DPI? Чтобы я мог, по крайней мере, расширить другие элементы управления, если я не могу настроить внутреннее заполнение элемента управления. Насколько мне известно, MSDN вообще не затрагивает проблемы с размерами.

1 Ответ

2 голосов
/ 24 ноября 2010

ComboBox автоматически устанавливает высоту элемента управления, и, как вы обнаружили, попытка установить собственную высоту фактически влияет на высоту раскрывающегося списка.

Чтобы получить реальную высоту элемента управления (чтобы вы могли изменить размеры других элементов управления), вы можете использовать GetWindowRect:

RECT rc;
GetWindowRect(hWndCombo, &rc);
int iComboHeight = rc.bottom - rc.top;

Я не знаю хорошего способа изменить высоту самого элемента управления Combo, и, честно говоря, я не верю, что это возможно, по крайней мере, без большого количества подклассов. Из-за этого я реализовал свой собственный элемент управления в стиле комбо.

Хотя это, вероятно, не поможет, вам также может понравиться функция GetComboBoxInfo (), чтобы узнать, предоставляет ли она какую-либо полезную информацию.

...