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

    说明:

    SetItemData可以为每一行绑定一个DWORD类型的变量。用GetItemData可以获得这个变量。
    举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID,一般这个ID值本身没有什么意义,用户也不需要看,因此在CListCtrl的可见列中,你不需要显示。但往往做具体查询等操作时,你又需要用这个ID来完成。这时,用SetItemData将其绑定到每一行,将非常方便,用户操作哪一行,则用GetItemData可以得到对应记录的ID,直接用来做操作,很爽。
    由于绑定的是DWORD类型,因此还有一个扩展作用是绑定一个指针对象。比如这里我不再是一个ID主键了,而是需要关联一个数据结构,那么就可以把该数据结构对象的指针进行SetItemData绑定。这么做,可以省去再到一堆的数据结构数组中去查找的过程。

    第一步:

    定义全局变量:

    int sort_column; // 记录点击的列

    bool method; // 记录比较方法

    第二步:

    添加比较函数

    // 比较函数
    2staticint CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
    // 从参数中提取所需比较lc的两行数据
    int row1 = (int) lParam1;
    int row2 = (int) lParam2;
     CListCtrl* lc = (CListCtrl*)lParamSort;
    CString lp1 = lc->GetItemText(row1,sort_column);
    CString lp2 = lc->GetItemText(row2,sort_column);
     // 比较,对不同的列,不同比较,注意记录前一次排序方向,下一次要相反排序
     if (sort_column<2)
    {
    
    // int型比较
     if (method)
     return atoi(lp1)-atoi(lp2);
     else
     return atoi(lp1)-atoi(lp1);
    }
    else
    {
    
    // 文字型比较
     if (method)
    return lp1.CompareNoCase(lp2);
     else
     return lp2.CompareNoCase(lp1);
     }
    
     return0;
     }

    第三步:添加列头点击事件  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是用来控制顺序逆序的,看个人情况设置。

  • 相关阅读:
    sqlserver-一次updlock和withnolock和with check option 的报错原因分析
    类库文件引用web服务报错解决方法-在 ServiceModel 客户端配置部分中,找不到引用协定的默认终结点元素
    用timer自定义计划任务时间
    console 程序随系统启动及隐藏当前程序窗口
    爱积多合作农场正式上线试运营
    CSS-三列布局
    CSS-垂直居中
    form表单重置
    CSS3 选择器
    Tab选项卡
  • 原文地址:https://www.cnblogs.com/lujin49/p/4556912.html
Copyright © 2011-2022 走看看