获取鼠标悬停时 ClistBox 项目的索引

get the index of the ClistBox item on Mouse over

我有一个简单的 CListBox 控件。我在其中动态添加文本。是否可以获取鼠标当前悬停在列表框上的项目的索引? 基本上,我想根据鼠标位置为列表框中的每个项目显示工具提示。

非常感谢代码示例。

CListBox::ItemFromPoint成员returns离某点最近的项目的项目索引。

该点需要位于 CListBox 的客户坐标中。如果您在屏幕坐标中收到它们(例如,通过在 CListBox.

上调用 GetCursorPos), you will have to translate them calling CWnd::ScreenToClient

第二个参数(bOutside)告诉你,这个位置是否在一个项目之上。成员函数returns分别为FALSETRUE

我写这个答案是为了让其他人在遇到这个问题时可以得到帮助。 要事第一;您不能直接处理来自 Clistbox 的鼠标移动消息。因此,您基于 ClistBox class 创建一个新的 class,然后在该 class.Then 中处理 OnMouseMove(),在该 OnMouseMove() 函数中,您应该根据鼠标坐标(如 IInspectable 所述)。

代码示例;见下文。

BOOL b;
int n = ItemFromPoint(point,b);
CString str;
GetText( n,str);
AfxMessageBox(str);