我有一个简单的CListBox控件。我在其中动态添加文本。是否可以获取鼠标当前悬停在列表框上的项的索引?基本上,我想根据鼠标位置为列表框中的每个项目显示工具提示。
非常感谢代码示例。
CListBox::ItemFromPoint 成员返回最靠近点的项的项索引。
该点需要位于CListBox
的客户端坐标中。如果您在屏幕坐标中收到它们(例如,通过调用 GetCursorPos),则必须在CListBox
上调用 CWnd::ScreenToClient 来翻译它们。
第二个参数 (bOutside) 告诉您位置是否在项目上方。成员函数分别返回 FALSE
或 TRUE
。
我正在写这个答案,以便其他人在其他人面临此问题时可以获得帮助。首先要做的事;您无法直接从 Clistbox 处理鼠标移动消息。因此,您基于 ClistBox 类创建一个新类,然后在该类中处理 OnMouseMove()。然后,在该 OnMouseMove() 函数中,您应该根据鼠标坐标在列表框中获取项目(如 IInspectable 所述)。
有关代码示例;请参见下文。
BOOL b;
int n = ItemFromPoint(point,b);
CString str;
GetText( n,str);
AfxMessageBox(str);