工控编程吧

标题: 上位机MFC如何在列表控件中排序表项 [打印本页]

作者: qq263946146    时间: 2019-7-29 13:13
标题: 上位机MFC如何在列表控件中排序表项
排序对应的是列表框的成员函数SortItems。
当用户点击列表框列表头时,会触发消息LVN_COLUMNCLICK。
我们可以处理此消息的函数来实现排序。
例如        关联了函数ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST2, OnColumnclickList2)
在函数OnColumnclickList2中,我们调用 SortItems为实现排序。此函数要一个回调函数。
  1. void CGkbc8Dlg::OnColumnclickList2(NMHDR* pNMHDR, LRESULT* pResult)
  2. {
  3.         NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  4.         // TODO: Add your control notification handler code here
  5.                 //排序表项
  6.         m_ctrlList.SortItems(CompareFunc, LPARAM(&m_ctrlList));
  7.        
  8.         *pResult = 0;
  9. }
复制代码
下面是回调函数

  1. int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
  2. {
  3.         //获得列表控件
  4.         CListCtrl* pListCtrl = (CListCtrl*)lParamSort;

  5.         CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
  6.         CString strItem2 = pListCtrl->GetItemText(lParam2, 0);

  7.         return strcmp(strItem2, strItem1);
  8. }
复制代码
我们也提供一个例程供大家下载参考
例程也是在添加列表框控件,关联一个控件变量后,初始化设置了此变量
  1. AfxOleInit();

  2.                 //设置列表控件的报表显示方式
  3.         m_ctrlList.ModifyStyle(LVS_ICON | LVS_SMALLICON | LVS_LIST, LVS_REPORT);

  4.         //在列表控件中插入列
  5.         for (int n = 0; n < 4; n++)
  6.         {
  7.                 CString strColumnHeading = _T("");
  8.                 strColumnHeading.Format(_T("Column %d"), n);
  9.                 m_ctrlList.InsertColumn(n, strColumnHeading, LVCFMT_LEFT, 100);
  10.         }

  11.         //在列表控件中插入项
  12.         for (int m = 0; m < 10; m++)
  13.         {
  14.                 CString strItem = _T("");
  15.                 strItem.Format("Item %d", m);
  16.                 m_ctrlList.InsertItem(m, strItem);

  17.                 //设置列表中项的文本和数据
  18.                 for (int n = 1; n < 4; n++)
  19.                 {
  20.                         CString strText = _T("");
  21.                         strText.Format(_T("SubItem %d %d"), m, n);
  22.                         m_ctrlList.SetItemText(m, n, strText);
  23.                         m_ctrlList.SetItemData(m, m);
  24.                 }
  25.         }

  26.         //设置列表控件的背景图片
  27.         char c[100];
  28.         GetModuleFileName(NULL,c,100);
  29.         CString sName(c);
  30.         sName= sName.Left(sName.ReverseFind('\\')+1);
  31.         sName += "1.bmp";
  32.         m_ctrlList.SetBkImage(sName.GetBuffer(0));

  33.         //设置文本背景颜色为透明色
  34.         m_ctrlList.SetTextBkColor(CLR_NONE);
  35.                 //设置列表控件整行选中
  36.         m_ctrlList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
  37. //设置列表控件显示网格线
  38.         m_ctrlList.SetExtendedStyle(LVS_EX_GRIDLINES);
  39.                 //设置列表控件使用复选框
  40.         m_ctrlList.SetExtendedStyle(LVS_EX_CHECKBOXES);
复制代码
(, 下载次数: 0)