Получить индекс элемента 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);