CListCtrl排序 unicode vs2008

简介:
1. CCZLogAnalysisDlg类外面添加如下代码:
typedef struct tag_ListSortNode
{
         CListCtrl* pList;
         int nOrder;
         int nColum;
 
}LISTSORTNODE,*PLISTSORTNODE;
 
2. CCZLogAnalysisDlg.h头部文件添加如下代码:
//CListCtrl控件LVN_COLUMNCLICK函数的声明:
afx_msg void OnLvnColumnclickListdatainfo(NMHDR *pNMHDR, LRESULT *pResult);
//回调函数的声明:
static int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort);
//结构体的声明:
LISTSORTNODE m_tSortColumns[3];
 
3. CCZLogAnalysisDlg.cpp源文件添加如下代码:
void CCZLogAnalysisDlg::OnLvnColumnclickListdatainfo(NMHDR *pNMHDR, LRESULT *pResult)
{
         //LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
         //// TODO: 在此添加控件通知处理程序代码
 
         //*pResult = 0;
 
         NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
         // TODO: Add your control notification handler code here
         //获取列的排序数据
         PLISTSORTNODE pItem = &m_tSortColumns[pNMListView->iSubItem];
         pItem->pList        = &m_ListCtrl;
         pItem->nColum       = pNMListView->iSubItem;
         if ( pItem->nOrder == 0 )
         {
                   pItem->nOrder = 1;
         }
         else
         {
                   pItem->nOrder = 0;
         }
 
         m_ListCtrl.SortItems(CompareFunc,(LPARAM)pItem);
         *pResult = 0;
}
int CALLBACK CCZLogAnalysisDlg::CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
{
         PLISTSORTNODE pItem =(PLISTSORTNODE)lParamSort;
         CListCtrl*   list =pItem->pList;
         int          isub =pItem->nColum;
         LVFINDINFO findInfo;
         findInfo.flags = LVFI_PARAM;
         findInfo.lParam = lParam1;
         int iItem1      = list->FindItem(&findInfo, -1);
         findInfo.lParam = lParam2;
         int iItem2      = list->FindItem(&findInfo, -1);
 
         CString strItem1 =list->GetItemText(iItem1,isub);
         CString strItem2 =list->GetItemText(iItem2,isub);
 
         const wchar_t* cItem1 = NULL;
         const wchar_t* cItem2 = NULL;
         cItem1 = strItem1.GetBuffer(sizeof(strItem1));
         cItem2 = strItem2.GetBuffer(sizeof(strItem2));
 
         ////判断是否比较列是否为数值
         //if ( isub == 2 )
         //{
         //      int nNum1 = atoi( strItem1 );
         //      int nNum2 = atoi( strItem2 );
         //      if(pItem->nOrder == 0)
         //               return nNum1>nNum2 ? 1 : -1;
         //      else
         //               return nNum1>nNum2 ? -1 : 1;
         //}
         //else
         //{
         //      if(pItem->nOrder == 0)
         //               return strcmp(strItem2, strItem1);
         //      else
         //               return -strcmp(strItem2, strItem1);
         //}
         if ( isub != 2 )
         {
                   if(pItem->nOrder == 0)
                            return wcscmp(cItem2, cItem1);
                   else
                            return -wcscmp(cItem2, cItem1);
         }
}
 
4.最重要的一步:
在控件InsertItem与SetItemText函数之间添加SetItemData函数。
 
//添加ListCtrl数据
int nRet;    //m_ListCtrl为控件对应变量
nRet = m_ListCtrl.InsertItem( m_ListCtrl.GetItemCount( ), _T("http://www.a3gs.com ") );
//设置一个唯一的Item数据,否则无法排序
m_ListCtrl.SetItemData( nRet, 0 );
m_ListCtrl.SetItemText( nRet, 1, _T("天使知识授理厂") );
m_ListCtrl.SetItemText( nRet, 2, _T("100") );
 
nRet = m_ListCtrl.InsertItem( m_ListCtrl.GetItemCount( ), _T("http://www.a3gs.com") );
m_ListCtrl.SetItemData( nRet, 1 );
m_ListCtrl.SetItemText( nRet, 1, _T("Android") );
m_ListCtrl.SetItemText( nRet, 2, _T("20") );
 


本文转自 韬光星夜 51CTO博客,原文链接:http://blog.51cto.com/xfqxj/1130686,如需转载请自行联系原作者
相关文章
|
存储 网络协议
TCP服务器 IO多路复用的实现:select、poll、epoll
TCP服务器 IO多路复用的实现:select、poll、epoll
300 0
|
11月前
|
供应链 数据可视化 搜索推荐
商业模式画布BMC入门指南:模块、实操与工具
2分钟了解什么是商业模式画布BMC,哪些工具可以绘制。
1381 11
商业模式画布BMC入门指南:模块、实操与工具
|
分布式计算 Hadoop Java
Hadoop集群搭建,基于3.3.4hadoop和centos8【图文教程-从零开始搭建Hadoop集群】,常见问题解决
本文是一份详细的Hadoop集群搭建指南,基于Hadoop 3.3.4版本和CentOS 8操作系统。文章内容包括虚拟机创建、网络配置、Java与Hadoop环境搭建、克隆虚拟机、SSH免密登录设置、格式化NameNode、启动Hadoop集群以及通过UI界面查看Hadoop运行状态。同时,还提供了常见问题的解决方案。
Hadoop集群搭建,基于3.3.4hadoop和centos8【图文教程-从零开始搭建Hadoop集群】,常见问题解决
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成
【5月更文挑战第4天】随着人工智能(AI)技术的飞速发展,其在软件测试领域的应用也日益广泛。特别是在自动化测试过程中,AI技术能够显著提高测试用例的生成效率和质量。本文将探讨AI在自动化测试用例生成中的应用原理、优势以及面临的挑战,并展示通过AI技术优化测试流程的实际案例。
920 8
|
小程序 JavaScript Java
暹罗外卖开源啦,一款java多商户外卖系统-商家入驻如美团饿了么
暹罗外卖是一款Java外卖配送系统,适用于多商户入驻,对标美团外卖、饿了么。系统包含用户端、商家端、配送端以及总管理后台; 前端使用uni-app开发,可打包部署到微信小程序、APP、H5 Web端使用vue + Element开发 服务端使用java语言开发,技术栈:Spring Cloud & Alibaba + Redis + RocketMQ + WebSocket + ElasticSearch + ELK + Sentinel + Seata + SkyWalking + SpringBoot Admin + Promethues + Grafana
839 2
暹罗外卖开源啦,一款java多商户外卖系统-商家入驻如美团饿了么
|
Windows
掌握命令提示符(CMD):Windows命令行工具的基本指南
掌握命令提示符(CMD):Windows命令行工具的基本指南
2167 0
|
存储 算法 小程序
动态分区分配计算
动态分区分配计算
1060 0
|
Java Android开发 开发工具
Android JNI实现简单的c层调用Java层函数(C层调用Java层Toast进行提示)
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 以前做过一段时间的JNI开发但是总是容易忘记一些简单的jni操作,最近重拾走过的jni开发之路,这里记录下如何在c层调用Java层类及方法,这里的类和方法可以是SDK里面的,也可以是自己编写的。
2028 0
|
分布式数据库 计算机视觉
为现有图像处理程序添加读写exif的功能
为现有图像处理程序添加读取exif的功能 exif是图片的重要参数,在使用过程中很关键的一点是exif的数据能够和图片一起存在。exif的相关功能在操作系统中就集成了,在csharp中也似乎有了实现。但是使用mfc来实现这个功能,的确费了我的一些时间。
1151 0