zoukankan      html  css  js  c++  java
  • CtrlList 排序问题。

    点击列标题进行排序。

    1,定义两个变量:
    BOOL m_iSortFlag; //用来指示本次排序是升序还是降序
    int m_iSort;//排序依据的列号

    2,为CtrlList添加事件:
    void CCardManageDlg::OnColumnclickWareTable(NMHDR* pNMHDR, LRESULT* pResult)
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here
      m_iSort = pNMListView->iSubItem;
    for(int i = 0;i < m_waretable.GetItemCount();i++)
    {
      m_waretable.SetItemData(i,i);//为所有行设置一个序号,排序的依据。
    }   
    m_iSortFlag > 0 ? m_iSortFlag=-1 : m_iSortFlag=1;// 确定升降序 
    m_waretable.SortItems((PFNLVCOMPARE)CompareFunc,(LPARAM)this);//发送排序信息给排序函数。

    *pResult = 0;
    }

    3,实现排序函数,此函数的功能是比较两行的大小,这里比较字符串的大小:
    int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)

       
    CListCtrl* pListCtrl = &(((CCardManageDlg*)lParamSort)->m_waretable); 
    CString strItem1 = pListCtrl->GetItemText(lParam1,((CCardManageDlg*)lParamSort)->m_iSort); 
    CString strItem2 = pListCtrl->GetItemText(lParam2,((CCardManageDlg*)lParamSort)->m_iSort); 
    TRACE("lParam1=%d %s compare with  lParam2  = %d %s \n",lParam1,strItem1,lParam2,strItem2); 
    return strcmp(strItem2,strItem1)*((CCardManageDlg*)lParamSort)->m_iSortFlag;//乘以iSortFlag以实现点一次换一种排序法。
    }

  • 相关阅读:
    C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll]
    php框架
    ExtJS带验证码登录框[新增回车提交]
    ant 读取环境变量的值
    Apache Velocity实现模板化
    23种设计模式概述
    android资源下载
    无序hashset与hashmap让其有序
    PermGen space错误解决方法
    设计模式之代理模式(Proxy)
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/1623691.html
Copyright © 2011-2022 走看看