zoukankan      html  css  js  c++  java
  • MFC List Control整行选中及其他相关技巧

    在mfc使用List Control控件的大部分时间需要有整行选中的功能,这个时候可以通过设置其风格来实现。代码如下:

    mydetector.SetExtendedStyle( LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );//mydetector为List Control控件所绑定的变量对象,在设置风格之前,记得将控件的属性选择为report


    可由下面代码添加列标及插入一行数据

    mylocationlist.InsertColumn( 0, L"巡航路线", LVCFMT_LEFT,65 );// 插入第一列列标签65为标签宽度,LVCFMT_LEFT为对齐方式
    mylocationlist.InsertColumn( 1, L"名称", LVCFMT_LEFT,65 );// 插入第二列列标签
    int nRow = mylocationlist.InsertItem(1,L"HAH");// 插入行第一列数据
    mylocationlist.SetItemText(nRow, 1, L"HAH");// 插入第二列数据

    在列表框控件的NM_CLICK消息响应函数中添加以下代码,可得到单击选中列表项的值

    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    POSITION ps;
    int nIndex;
    ps=mylocationlist.GetFirstSelectedItemPosition();
    nIndex=mylocationlist.GetNextSelectedItem(ps);//nIndex为选中的列表项Item值
    *pResult = 0;


    可通过下面代码删除指定项,结合上面代码可删除鼠标单击选定项

    mylocationlist.DeleteItem(nIndex);


    结合上面代码,可写出对列表框项进行上移下移的操作

    CString myway=mylocationlist.GetItemText(mylistchoise,0);//<span style="font-family: Arial, Helvetica, sans-serif;">mylistchoise为选中的要上移的项的Item</span>
    CString myname=mylocationlist.GetItemText(mylistchoise,1);
    mylocationlist.DeleteItem(mylistchoise);//删除选中行
    int nRow = mylocationlist.InsertItem(++mylistchoise,myway);//把列插入到选择项的上面一项,看起来就像是上移了一项
    mylocationlist.SetItemText(nRow,1,myname);
    下移同理

    如果需要添加每一行的复选框,可以在初始化代码中设置控件的风格

    DWORD dwStyle = mydriverspacelist.GetExtendedStyle(); 
    dwStyle |= LVS_EX_CHECKBOXES; 

    如果需要知道选中的复选框的状态,可以在 List Control 控件的LVN_ITEMCHANGED消息添加响应函数(双击该控件亦可自动添加)

    void SavelocationDlg::OnLvnItemchangedListMydriverlist(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    	CString mychoiseitem;
    	if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(1)) /* old state : unchecked */ 
    	  && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(2)) /* new state : checked */ 
    	  ) 
    	{ 
    		mychoiseitem.Format(L"选中ITEM%d", pNMLV->iItem);
    		MessageBox(mychoiseitem);
    	} 
    	else if((pNMLV->uOldState & INDEXTOSTATEIMAGEMASK(2)) /* old state : checked */ 
    	  && (pNMLV->uNewState & INDEXTOSTATEIMAGEMASK(1)) /* new state : unchecked */ 
    	  ) 
    	{ 
    		mychoiseitem.Format(L"取消ITEM%d", pNMLV->iItem);
    		MessageBox(mychoiseitem);
    	} 
    	*pResult = 0;
    }

    点击复选框

    mydriverspacelist.SetCheck(0, 1);//设置第一行选中,如果第二个参数为0则为取消
    获得复选框选择情况

    mydriverspacelist.GetCheck(i);//获得第i行选择情况

    获得指定行指定列的内容

    CString s=m_list.GetItemText(i,j);i是行,j是列。m_list是个list control 对象







  • 相关阅读:
    py4CV例子2汽车检测和svm算法
    py4CV例子1猫狗大战和Knn算法
    KNN(K-Nearest Neighbor)介绍
    从机器学习谈起
    基于QProbe创建基本Android图像处理框架
    qtquickcontrols2控件集(使用参考重构)
    QtQuickcontrols2控件使用参考
    QTQuick控件基础(3)视图
    QTQuick控件基础(2)
    在win和android上同时进行OpenCV程序设计
  • 原文地址:https://www.cnblogs.com/weixinhum/p/3916707.html
Copyright © 2011-2022 走看看