Как изменить видимую высоту элемента управления Combobox с помощью выпадающего списка, но не стиля владельца?

Фон: в определенном диалоге есть несколько элементов управления подряд. Я хотел бы, чтобы все они имели одинаковую видимую высоту. Однако для комбинированного списка со стилем CBS_DROPDOWNLIST и без CBS_OWNERDRAW * у меня возникают проблемы с изменением видимой высоты.

Вопрос: Как я могу изменить видимую высоту такого комбинированного списка DROPDOWNLIST?

Я знаю, что комбинированный список не позволяет изменять высоту с помощью SetWindowPos. Однако у меня сложилось впечатление, что отправка сообщения CB_SETITEMHEIGHT с wParam = -1 должна изменить высоту. Этот метод работает для комбинированных списков с набором стилей CBS_OWNERDRAWFIXED (я хотел избежать установки этого стиля, хотя, чтобы сохранить "Кнопка типа» смотреть).

Среда: мое приложение Win32 использует Common-Controls 6.0, и я обеспокоен появлением в среде, где включены визуальные стили (Windows 7, Aero).

 Daniel Flassig28 мая 2013 г., 10:05
Нет, так же как и SetWindowPos, MoveWindow не влияет на видимую высоту. В качестве обходного пути я переключился на использование кнопок разделения со стилем разделения BCSS_NOSPLIT и всплывающим меню. Таким образом, я теряю встроенный автоматический выбор при вводе имени элемента, но слегка ухудшенная доступность клавиатуры кажется приемлемой в моем случае использования. Я все еще был бы заинтересован в ответе на вопрос, хотя.
 Edward Clements26 мая 2013 г., 11:28
пытатьсяMoveWindow

Ответы на вопрос(1)

Решение Вопроса

Как вы упоминаете, ниSetWindowPos ниMoveWindow работать так, как вы ожидаете. Тот'потому чтовысота ComboBox включает в себя высоту выпадающего, Элемент управления автоматически изменяет размеры в соответствии с размером используемого шрифта. Таким образом, чтобы изменить размер, измените размер элемента управления "S шрифт, отправив егоWM_SETFONT сообщение.

Но я неЯ не понимаю, почему это проблема. Вы говорите, что хотите, чтобы серия элементов управления имела одинаковую высоту, но если вы неПри изменении высоты других элементов управления они уже должны совпадать. Поскольку все элементы управления в диалоговом окне обычно используют один и тот же шрифт, поля со списком и текстовые поля должны уже иметь одинаковую высоту. Когда вы используете v6 общих элементов управления и визуальные стили включены, ониБудет применяться ко всем этим элементам управления, и они должны иметь одинаковый внешний вид. Ты не долженне нужно возиться с высотами вручную.

 andlabs23 янв. 2017 г., 20:10
@CodyGray, тогда я, вероятно, неправильно понимаю, о чем говорили люди. Я забыл вопрос прямо сейчас, но это было недавно. Также я'я не гадал так много, как мне интересно, было ли что-то еще, что я пропустил. Кажется, чтоGetWindowRect(COMBOBOXINFO.hwndCombo) ключ здесь; два RECTs в этой структуре не суммируются (если нет).
 andlabs22 янв. 2017 г., 20:19
@DanielFlassig, если ты еще нек настоящему времени BCM_GETIDEALSIZE - это плотно прилегающий размер
 Cody Gray23 янв. 2017 г., 17:46
И да, @andlabs,GetComboBoxInfo() это то, что я бы использовал. По крайней мере, это был бы мой первый инстинкт. Почему вы догадались об этом выборе?
 Daniel Flassig30 мая 2013 г., 12:28
Вопрос возникает, в частности, для кнопок рядом с полями со списком, так как размер кнопок соответствует размеру в соответствии с параметрами CreateWindow (или DLU в ресурсах диалога). У меня нетt еще экспериментировал с BCM_GETIDEALSIZE.
 andlabs22 янв. 2017 г., 20:21
@CodyGray хорошо, я знаю, что это воскресение мертвых, но яЗа последние 4 недели мы видели несколько человек, которые говорили это о визуальных стилях иоставил меня в полном замешательстве: просто манифест и призывInitCommonControlsEx() автоматически применять правильные шрифты к элементам управления или нет? Потому что по моему опыту это не так, но, кажется, все остальные думают, что это так? ... Опять же, извините за воскресение, но ятеперь я действительно в замешательстве: S (FWIW Я нашел этот ответ, ища способ получить высоту необработанного комбинированного списка, свернутого для макета; GetComboBoxInfo () может быть моей единственной возможностью)
 Cody Gray23 янв. 2017 г., 17:43
Нет, это не так, @andlabs. Это никогда не имеет. Я неНе знаю, кто на это претендует, но они неверны. Для элемента управления, который вы создаете (например, вызывая CreateWindow), вы должны вручную установить нужный шрифт, в противном случае вы получите неприятный 16-битный шрифт Windows SYSTEM. Для диалоговых окон вы можете установить комбинацию флагов (я точно забыл, какие они есть, и мне лень их искать, что-то вроде DS_SYSFONT) и автоматически установить шрифт, но этоеще ISN»t правильный шрифт в Vista и более поздних версиях, поскольку шрифт по умолчанию был изменен на пользовательский интерфейс Segoe. Увидетьstackoverflow.com/a/6057761/366904

Ваш ответ на вопрос