我有一个使用自定义绘图的CListBox,需要检测每个项目中的鼠标点击以执行操作。
我可以在主控制器上听鼠标点击,并且可以将coords转换为鼠标下项目的RECT的局部空间。但是,是否可以为单个列表项的点击注册消息处理程序...是否有消息?
答案 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