CLISTCTRL 获取点击列

Posted xzh1993

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; 
}

以上是关于CLISTCTRL 获取点击列的主要内容,如果未能解决你的问题,请参考以下文章

MFC CListCtrl获取列数出错了,怎么回事?

CListCtrl:在 HeaderControl 上获取 DblClick

MFC CListCtrl空间中,如果在鼠标点击某一个Item时,获得该Item的内容。

CListCtrl:没有列标题的单列?

MFC总结之CListCtrl用法及技巧

CListCtrl (MFC) 选择点击通过控制UNDERNEATH列表