Как установить высоту для переменной рисования владельца CListBox (MFC) - PullRequest
1 голос
/ 17 января 2012

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

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

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

1 Ответ

1 голос
/ 17 января 2012

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

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

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

...