ListCtrl控件,如何确定被点击单元的Item和subItem
编号:QA004058
建立日期: 2001年3月29日 最后修改日期:2003年11月30日
所属类别:
Q
hua:
操作系统: win2000 svr
编程工具: vc6
问题: Report风格的ListCtrl控件,当鼠标点击时,如何确定被点击单元的Item和subItem?
水平: 中级
A回答:
你可以使用HitTest方法知道用户点击的是哪个条目。下面是kailoon提供的代码:
void CListCtrlDlg::OnClickListCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POINT pt;
int j;
GetCursorPos(&pt);
CRect rect;
m_listCtrl.GetWindowRect(rect);
pt.x-=rect.left;
pt.y-=rect.top;
i=m_listCtrl.HitTestEx(CPoint(pt),&j);
*pResult = 0;
}
yeliang的意见:
用 HitTest的时候需要给定条目的点的位置,不是很方便,而用另外一个函数GetItemState会更好一点具体实现如下:
int n,n0,n1;
n0=m_copyList.GetTopIndex();
n1=m_copyList.GetItemCount();
n1+=n0;
for(n=n0;n<=n1;n++)
{
if(m_copyList.GetItemState(n,LVIS_SELECTED)==LVIS_SELECTED)
index=n;
}
小王的意见:
可以这样
CString name;
int i;
int iItem=m_nList.GetNextItem(-1,LVNI_SELECTED);
name=m_m_nList.GetItemText(iItem,i);
其中 name即为选中第i列的值。
jmpinto的意见:
POSITION pos;
CRect rect;
int iItem;
int iSubItem;
iItem=m_nList.GetNextItem(-1,LVNI_SELECTED);
POINT pt;
GetCursorPos(&pt);
GetWindowRect(rect);
pt.x-=rect.left;
pt.y-=rect.top;
for ( int i=0, j=0; ; i++)
{
j+=GetColumnWidth(i);
if ( pt.x < j )
break;
}
iSubItem = i;
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, Windows 9x控件, listview, treeview, monthview, progress bar。
| |
|
|
| |
|
|