Искать элемент в CListCtrl - PullRequest
1 голос
/ 01 мая 2020

Я пытаюсь найти индекс элемента в CListCtrl с указанными c данными. В моем случае данные (не текст элемента) являются единственным критерием, по которому я сравниваю элементы.

Я пытался использовать CListCtrl :: FindItem , но функция ожидает LVFINDINFOW * - Я не думаю, что это работает для меня. Я также пытался повторить clistctrl - снова безуспешно.

Заранее спасибо всем, кто участвует!

1 Ответ

3 голосов
/ 01 мая 2020

Когда вы устанавливаете «данные» для элемента в CListCtrl с помощью функции-члена SetItemData, вы фактически устанавливаете поле lParam его связанного LVITEM структура, как указано в документации, связанной выше:

Примечания Это значение является элементом lParam структуры LVITEM, как описано в Windows SDK.

Поэтому, если вы хотите выполнить поиск элемента с данными, установите элемент flags из структуры LVFINDINFOW в LVFI_PARAM, а в ее поле lParam - значение данных, которое вы ищете; затем вызовите функцию FindItem, используя эту структуру:

LVFINDINFOW findInfo;
LPARAM searchData = 42; // Or whatever you're looking for
findInfo.flags = LVFI_PARAM;
findInfo.lParam = searchData;
int dataPos = myListCtrl.FindItem(-1, &findInfo);
//...
...