CLISTCTRL 获取点击列

CListCtrl中的HitTest、SubItemHitTest的用法  


2HitTest:得到当前鼠标位置的Item


其实关键是要有ScreenToClient这个函数的使用,我先前没有用这个函数,HitTest老是返回-1,搞得我都头大了。不过这个不能用于SubItem,那应该要用SubItemHitTest


LVHITTESTINFO ht ;


GetCursorPos(&(ht.pt)) ;


m_friendList.ScreenToClient(&ht.pt) ;


m_friendList.HitTest(&ht) ;


 if(ht.iItem == -1) //检查是否有item选中


      return  ;


SubItemHitTest:


void   CTest6Dlg::OnClickList1(NMHDR*   pNMHDR,   LRESULT*   pResult)   

/****************************************/ 
/*       确定单击的listctrl的行列号   方法1       */ 
/****************************************/ 


/* 
DWORD   dwPos   =   GetMessagePos(); 
CPoint   point(   LOWORD(dwPos),   HIWORD(dwPos)   ); 


m_list.ScreenToClient(&point);   


LVHITTESTINFO   lvinfo; 
        lvinfo.pt   =   point; 
        lvinfo.flags   =   LVHT_ABOVE; 
        
int   nItem   =   m_list.SubItemHitTest(&lvinfo); 
if(nItem   !=   -1) 

CString   strtemp; 
strtemp.Format( "单击的是第%d行第%d列 ",   lvinfo.iItem,   lvinfo.iSubItem); 

*pResult   =   0; 
}

posted @ 2017-07-21 13:30  xzh1993  阅读(1081)  评论(0编辑  收藏  举报