在CListCtrl中item的焦点能被获取到吗
在CListCtrl控件中,当用鼠标点击一行item,焦点就会到这一行,然后上面有个按钮,用来响应某个被选中焦点item的删除操作,我想请问的是,这个焦点该怎么被获取啊,...
在CListCtrl控件中 ,当用鼠标点击一行item,焦点就会到这一行,然后上面有个按钮,用来响应某个被选中焦点item的删除操作,我想请问的是,这个焦点该怎么被获取啊,item有控件ID吗?焦点要精确到CListCtrl的行。
展开
展开全部
item肯定是没有“控件ID”的。
不过当选中CListCtrl的一行后,可以获取选中的行号并根据行号操作,这个应该可以满足你的需求。
POSITION pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_list.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
// you could do your own processing on nItem here
}
}
也可以响应行鼠标点击消息:
添加listctrl控件的NM_CLICK消息相应函数
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// 方法一:
/*
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);
AfxMessageBox(strtemp);
}
*/
// 方法二:
/*
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("单击的是第%d行第%d列",
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*/
*pResult = 0;
}
追问
那该怎么实现 按着shift 或者ctrl键 然后批量获取选中item呢,非常感谢上个问题
追答
CListCtrl控件的属性里面,就有MultiSelect,选中即可。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询