CListCtrl選中某行


 

原文鏈接: 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;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM