实际案例如下:
将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,所以出现上述现象就不足为奇了