获取鼠标单击MFC CListBox项目的相对X / Y.

时间:2009-10-29 17:02:58

标签: mfc

我有一个使用自定义绘图的CListBox,需要检测每个项目中的鼠标点击以执行操作。

我可以在主控制器上听鼠标点击,并且可以将coords转换为鼠标下项目的RECT的局部空间。但是,是否可以为单个列表项的点击注册消息处理程序...是否有消息?

4 个答案:

答案 0 :(得分:1)

您可以使用LVM_HITTEST消息找出点击的项目。

答案 1 :(得分:0)

我不确定我理解为什么你需要在Clistbox的每个项目中都有XY坐标?

反正 AFAIK,单个项目不是CWnd派生对象。

你可以使用OnLButtonDown(或更高版本)在控件内部获得鼠标位置,它会返回一个CPoint。

之后,使用CListBox :: GetItemRect来获取当前所选项目的矩形,进行一些像素计算,你应该能够在所选项目的矩形内得到XY。

最大

答案 2 :(得分:0)

那么你可以只听LBN_SELCHANGE通知。每次用户点击新项目时都会触发。如果选择了已选择的项目,则不会激活。这可能是也可能不是问题。

除此之外,我非常确定你需要拦截WM_LBUTTONUP消息并将它们转换为列表框的客户端空间......

或者您可以使用单个圆柱CListCtrl(ListView)类并关闭标头(LVS_NOCOLUMNHEADER)。然后,您可以捕获NM_CLICK消息。就个人而言,我非常喜欢CListCtrl到CListBox。它有点复杂,但更强大:)

修改:或者您可以尝试使用http://msdn.microsoft.com/en-us/library/bb761323(VS.85).aspx

答案 3 :(得分:0)

使用DPtoLP功能将设备坐标转换为逻辑坐标。 http://msdn.microsoft.com/en-us/library/dd162474(v=vs.85).aspx