获取鼠标悬停时 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分别为FALSE
或TRUE
。
我写这个答案是为了让其他人在遇到这个问题时可以得到帮助。
要事第一;您不能直接处理来自 Clistbox 的鼠标移动消息。因此,您基于 ClistBox class 创建一个新的 class,然后在该 class.Then 中处理 OnMouseMove(),在该 OnMouseMove() 函数中,您应该根据鼠标坐标(如 IInspectable 所述)。
代码示例;见下文。
BOOL b;
int n = ItemFromPoint(point,b);
CString str;
GetText( n,str);
AfxMessageBox(str);
我有一个简单的 CListBox 控件。我在其中动态添加文本。是否可以获取鼠标当前悬停在列表框上的项目的索引? 基本上,我想根据鼠标位置为列表框中的每个项目显示工具提示。
非常感谢代码示例。
CListBox::ItemFromPoint成员returns离某点最近的项目的项目索引。
该点需要位于 CListBox
的客户坐标中。如果您在屏幕坐标中收到它们(例如,通过在 CListBox
.
第二个参数(bOutside)告诉你,这个位置是否在一个项目之上。成员函数returns分别为FALSE
或TRUE
。
我写这个答案是为了让其他人在遇到这个问题时可以得到帮助。 要事第一;您不能直接处理来自 Clistbox 的鼠标移动消息。因此,您基于 ClistBox class 创建一个新的 class,然后在该 class.Then 中处理 OnMouseMove(),在该 OnMouseMove() 函数中,您应该根据鼠标坐标(如 IInspectable 所述)。
代码示例;见下文。
BOOL b;
int n = ItemFromPoint(point,b);
CString str;
GetText( n,str);
AfxMessageBox(str);