zoukankan      html  css  js  c++  java
  • 简单实现MFC ListControl 点击列头排序

    第一步:

    定义全局变量:

    int sort_column; // 记录点击的列

    bool method; // 记录比较方法

    第二步:

    添加比较函数

    1 // 比较函数
    2 staticint CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    3 {
    4
    5 // 从参数中提取所需比较lc的两行数据
    6
    7 int row1 = (int) lParam1;
    8 int row2 = (int) lParam2;
    9
    10 CListCtrl* lc = (CListCtrl*)lParamSort;
    11
    12 CString lp1 = lc->GetItemText(row1,sort_column);
    13 CString lp2 = lc->GetItemText(row2,sort_column);
    14
    15
    16 // 比较,对不同的列,不同比较,注意记录前一次排序方向,下一次要相反排序
    17
    18 if (sort_column<2)
    19 {
    // int型比较
    20 if (method)
    21 return atoi(lp1)-atoi(lp2);
    22 else
    23 return atoi(lp1)-atoi(lp1);
    24 }
    25 else
    26 {
    // 文字型比较
    27 if (method)
    28 return lp1.CompareNoCase(lp2);
    29 else
    30 return lp2.CompareNoCase(lp1);
    31 }
    32
    33 return0;
    34 }


    第三步:添加列头点击事件  Lvn_Columnclick

    void ClistDlg::OnLvnColumnclickxxx(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMLISTVIEW pNMLV
    = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    sort_column = pNMLV->iSubItem;//点击的列

    int count = m_list_port.GetItemCount();

    for (int i=0;i<count;i++)
      m_list_port.SetItemData(i,i);
    // 每行的比较关键字,此处为列序号(点击的列号),可以设置为其他 比较函数的第一二个参数

    m_list_port.SortItems(MyCompareProc,(DWORD_PTR)
    &m_list_port);//排序 第二个参数是比较函数的第三个参数

    *pResult =0;
    }

    完成。

    method是用来控制顺序逆序的,看个人情况设置。

  • 相关阅读:
    九九乘法表
    获取1-10 的和,并打印 2.1-100 之间 7 的倍数的个数,并打印
    1-100之间 7 的倍数的个数,并打印
    无限循环的最简单的表现形式
    for 和 while 区别
    do while 和 while 区别
    if 和 switch 比较
    星期和月份
    【运筹优化】求职与工作思考 -求职需要的技能(一)
    python 在线笔试的OJ输入输出总结
  • 原文地址:https://www.cnblogs.com/v2m_/p/1950814.html
Copyright © 2011-2022 走看看