文章类型: VC&C++
关键词: CListCtrl选中某行
内容摘要: CListCtrl选中某行

CListCtrl选中某行

2016/12/28 11:25:32    来源:apple    阅读:

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;

}

↑ 上一篇文章:GetBuffer与ReleaseBuffer的用法,CString剖析 关键词:GetBuffer与ReleaseBuffer的用法,C.. 发布日期:2016/12/26 16:12:15
↓ 下一篇文章:成功使用U盘来安装原盘镜像Win10的心得 关键词:成功使用U盘来安装原盘镜像Win10的心得 发布日期:2017/1/3 9:16:25
相关目录:.NETVC&C++软件开发
我要评论
正在加载评论信息......