Получить индекс элемента ClistBox при наведении мыши

У меня есть простой элемент управления CListBox. Я динамически добавляю тексты в нем. Можно ли получить индекс элемента, над которым в данный момент находится курсор мыши, в списке? По сути, я хочу отобразить всплывающую подсказку для каждого элемента списка в зависимости от положения мыши.

Примеры кода действительно ценятся.

2 ответа

Решение

Член CListBox::ItemFromPoint возвращает индекс элемента, ближайшего к точке.

Точка должна быть в клиентских координатах CListBox, Если вы получите их в экранных координатах (например, вызвав GetCursorPos), вам придется перевести их, вызвав CWnd::ScreenToClient на CListBox,

Второй параметр (bOutside) сообщает вам, находится ли позиция над элементом или нет. Функция-член возвращает FALSE или же TRUEсоответственно.

Я пишу этот ответ, чтобы другие могли получить помощь в случае, если кто-то еще столкнулся с этой проблемой. Обо всем по порядку; Вы не можете напрямую обрабатывать сообщения о перемещении мыши из Clistbox. Итак, вы создаете новый класс на основе класса ClistBox и затем обрабатываете OnMouseMove() в этом классе. Затем внутри этой функции OnMouseMove() вы должны получить элемент в clistbox на основе координат мыши (как упомянуто в IInspectable).

Для примера кода; увидеть ниже.

BOOL b;
int n = ItemFromPoint(point,b);
CString str;
GetText( n,str);
AfxMessageBox(str);
Другие вопросы по тегам