CListControl的OnMouseMove和OnNcHitTest

来源:互联网 发布:ubuntu安装的软件在哪 编辑:程序博客网 时间:2024/06/10 02:25

实际案例如下:

 

将CListCtrl做成菜单样式。需要处理当鼠标移到ClistCtrl上的事件。

处理逻辑这样:当鼠标移动到CListCtrl区域时候,将CListCtrl上所有ITem置为非选中状态,然后调用HitTest得到行数再将所选行置为选中状态。当鼠标移出ClistCtrl区域时候,将原来选中状态不变。

 

 

 

在实际做的过程中,在判断鼠标是否移到CListCtrl客户区域时候,误用WM_NCHITTEST消息判断,在OnNcHitTest里面处理选中逻辑。导致每次鼠标移出ClistCtrl会偶尔出现原来选中的行选中状态会消失。PS:SetItemState(i, 0, -1) 取消选中状态

 

 

后来在OnMouseMove处理,通过PtInRect判断鼠标在客户区,当在客户区的时候再处理逻辑,效果实现。

 

 

原因是由于鼠标在移出ClistCtrl区域的时候,偶尔会接触到CListCtrl的边界,触发WM_NCHITTEST,由于在OnNcHitTest的逻辑判断是将所有行置为非选中状态,并且所选行为-1,所以出现上述现象就不足为奇了

原创粉丝点击