Как установить высоту для переменной рисования владельца CListBox (MFC)

У меня есть элемент управления ListBox для рисования с переменной высотой. Когда я вызываю AddString, отправляется сообщение MeasureItem с просьбой сообщить Windows размер элемента. Проблема в том, что у кода еще не было возможности вызвать SetItemData, поэтому код еще не может определить размер.

Я попытался вызвать SetRedraw (FALSE), надеясь, что это отложит запрос измерения, но безуспешно.

Итак, как я могу добавить элемент в CListBox и одновременно получить данные элемента? Я пробовал с LBS_HASSTRINGS и без. Не уверен, что еще попробовать.


person DougN    schedule 17.01.2012    source источник


Ответы (1)


Если ваш элемент управления списком не имеет стиля LBS_HASSTRINGS, аргумент указателя на AddString() рассматривается не как строка, а как данные элемента (см. Раздел примечаний в документации для LB_ADDSTRING).

Следовательно, если элементы вашего списка состоят как из строки, так и из некоторых данных элемента, вы можете обернуть эти две части информации в структуру или класс и передать указатель на эту оболочку в AddString().

Положительным моментом является то, что и строка, и данные элемента будут доступны к моменту вызова MeasureItem(). Обратной стороной является то, что вам придется реализовать CompareItem(), если ваш список отсортирован, и освободить оболочки как при удалении элементов, так и до того, как будет уничтожен элемент управления списком.

person Frédéric Hamidi    schedule 17.01.2012
comment
Потрясающе - я знал, что где-то там должен быть трюк :) - person DougN; 17.01.2012