码迷,mamicode.com
首页 > 其他好文 > 详细

CListCtrl选中某行

时间:2015-08-07 10:55:06      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

 

原文链接: http://blog.csdn.net/wxq1987525/article/details/7461461

1、设置CListCtrl选中行

m_list.SetItemState(
nIndex,
LVIS_FOCUSED | LVIS_SELECTED,
LVIS_FOCUSED | LVIS_SELECTED);

注意:这句代码只是让指定行高亮显示,如果使用后再用GetSelectionMark函数来得到选中行,结果往往是错误的。比如,先用鼠标点击选中第5行,调用GetSelectionMark函数得到的是4(第5行),再调用SetItemState函数选中第2行,然后调用GetSelectionMark函数得到的还是4(第5行),所以,需要在设置选中行高亮显示时,一般与SetSelectionMark函数连用:

m_list.SetItemState(
nIndex,
LVIS_FOCUSED | LVIS_SELECTED,
LVIS_FOCUSED | LVIS_SELECTED); //选中行

m_list.SetSelectionMark(nIndexs);

 

2、取消CListCtrl选中行

m_list.SetItemState(nIndex, 0, LVIS_SELECTED);

m_list.SetSelectionMark(-1);

 

3、CListCtrl选中行改变

项目中用到ClistCtrl,当选中行改变时,另外一个控件的详细信息也随之改变,最开始使用鼠标点击事件:

void CMyDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult)
{
TODO: Add your control notification handler code here
int nIndex = m_list.GetSelectionMark();
if (nIndex >=0)

{

//要进行的操作

}

}

后来发现,用鼠标点击并不完善,因为如果用键盘来切换选中行的话,另一控件的信息就改变不了,于是改用响应LVN_ITEMCHANGED消息,发现改变选中行时会有好几个LVN_ITEMCHANGED消息,加入判断即可:

void CMyDlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if(pNMListView->uChanged == LVIF_STATE)
{
if(pNMListView->uNewState)
{
int nIndex = pNMListView->iItem;

//要进行的操作

}

}

*pResult = 0;
}

 

 

CListCtrl选中某行

标签:

原文地址:http://www.cnblogs.com/huhu0013/p/4709981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!