zoukankan      html  css  js  c++  java
  • 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;
    }

     

  • 相关阅读:
    Genbank简介
    Asc码与字符互相转化
    Netbeans中文乱码
    弹出警告窗口
    PHP代码执行漏洞总结
    透析SCN
    oracle用户管理的完全恢复4:在ARCHIVELOG 模式(恢复打开的数据库数据库最初是关闭的)
    Oracle用户管理的不完全恢复2:基于取消的恢复
    RMAN备份详解1
    oracle用户管理的完全恢复6:控制文件损坏(控制文件前后内容改变)
  • 原文地址:https://www.cnblogs.com/huhu0013/p/4709981.html
Copyright © 2011-2022 走看看