2005.01.05发表于blog.csdn.net/zxub

  昨天做了ListControl中的排序功能,但是使用后,发现只有在第一次数据完全没排序的时候,排序才是正确的,仔细看了下排序用到的回调函数:
  int CALLBACK CStaMDiag::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)

 CString strItem1=g_dlg->m_List_StaResult.GetItemText((int)lParam1,(int)lParamSort); 
 CString strItem2=g_dlg->m_List_StaResult.GetItemText((int)lParam2,(int)lParamSort);
 int r1=atoi(strItem1);
 int r2=atoi(strItem2);
 if (r1==r2)
  return 0;
 else
 {
  if (r1>r2)
   return -1;
  else return 1;
 }  
}
  终于发现了问题所在,假设一开始的时候,lParam参数的排列是0,1,2,3,4,5,开始排序的时候,g_dlg->m_List_StaResult.GetItemText((int)lParam,(int)lParamSort)中,若要取第二个项目,正好是(1,lParamSort),但是,排序后,根据上面的算法,取第二个项目的时候,由于lParam参数的排列可能是0,3,2,1,4,5,结果,就会取错项目,从而导致排序的时候乱取项目来排,当然不准了,所以CString strItem1=g_dlg->m_List_StaResult.GetItemText((int)lParam1,(int)lParamSort)这种取法是错误的,所以,不能用lParam参数来表示数据所在的行了.既然可以传个lParam参数进来,那程序肯定是知道要取哪个项的,所以我们要做的是通过lParam正确得到项目中的数据,找了一下相关资料,结果如下:
CString strItem1, strItem2;
 LVFINDINFO info;
    int nIndex;
    info.flags=LVFI_PARAM;
 info.lParam=lParam1;
 if ( (nIndex=g_dlg->m_List_StaResult.FindItem(&info))!=-1)
        strItem1=g_dlg->m_List_StaResult.GetItemText(nIndex,(int)lParamSort);
 info.lParam=lParam2;
 if ( (nIndex=g_dlg->m_List_StaResult.FindItem(&info))!=-1)
        strItem2=g_dlg->m_List_StaResult.GetItemText(nIndex,(int)lParamSort);

  这样,就取到了正确的项,后面还要在进行什么操作,这里就不写了,我只说关键部分.

转载于:https://www.cnblogs.com/zxub/archive/2005/06/13/173843.html

再谈VC++中ListControl排序[原创]相关推荐

  1. Unity教程之再谈Unity中的优化技术

    这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的" ...

  2. 浅谈VC中使用Qt库之三

    前面我们讲到在VC中直接使用Qt,这种方法将Qt和VC代码混在一起,感觉不伦不类,更好的方法是将这些界面封装在库中,vc通过加载dll的方式来使用. 1.首先创建一个win32 项目->选择动态 ...

  3. 再谈C#中的委托和事件

    写在最前 我相信全网关于委托和事件的文章和概述,大家应该已经读过很多篇.但是就我的观察来看,大多数文在讲述这方面概念时,都会用烧开水和狗叫主人的例子来讲述事件怎么工作,这样比喻固然与生活联系紧密,但看 ...

  4. 浅谈 Java 中的排序

    前言 进来不要失望,这不是一篇讲排序算法的文章.而是简要介绍 Java 中排序相关的类Comparator.Comparable以及Collections.sort的使用. 写程序分为10个阶段:使用 ...

  5. JVM系列之:再谈java中的safepoint

    文章目录 safepoint是什么 safepoint的例子 线程什么时候会进入safepoint safepoint是怎么工作的 总结 safepoint是什么 java程序里面有很多很多的java ...

  6. NET Core微服务之路:再谈分布式系统中一致性问题分析

    前言 一致性:很多时候表现在IT系统中,通常在分布式系统中,必须(或最终)为多个节点的数据保持一致.世间万物,也有存在相同的特征或相似,比如儿时的双胞胎,一批工厂流水线的产品,当然,我们不去讨论非IT ...

  7. 瓦伦达心态——再谈工作中的专注和心态

    瓦伦达心态讲的是一个故事:瓦伦达是美国一个著名的高空走钢索的表演者,他在一次重大的表演中,不幸失足身亡.他的妻子事后说,我知道这一次一定要出事,因为他上场前总是不停地说,这次太重要了,不能失败:而以前 ...

  8. 再谈机器学习中的归一化方法(Normalization Method)

    机器学习.数据挖掘工作中,数据前期准备.数据预处理过程.特征提取等几个步骤几乎要花费数据工程师一半的工作时间.同时,数据预处理的效果也直接影响了后续模型能否有效的工作.然而,目前的大部分学术研究主要集 ...

  9. 移花接木—— 再谈javascript中的 call 与 apply

    2019独角兽企业重金招聘Python工程师标准>>> 在JavaScript中,call 和 apply 是Function对象自带的两个方法,这两个方法的主要作用是改变函数中的t ...

最新文章

  1. php libdir,PHP扩展小结
  2. HDFS报错解决:Operation category JOURNAL is not supported in state standby
  3. GrideView属性的学习
  4. Nginx实现tomcat集群进行负载均衡
  5. spring框架介绍_Spring框架介绍
  6. 【MM系列】SAP 关于更改物料的价格控制类型
  7. 最大公约数python语言算法_使用Python求解最大公约数的实现方法
  8. mysql+查询会话sql_MySQL Processlist--查看会话执行过的SQL情况
  9. 用VS2008做博客¥(^_^)¥
  10. 添加库文件_S7200的库文件导至200SMART正确操作
  11. python︱大规模数据存储与读取、并行计算:Dask库简述
  12. InnoDB脏页,重做日志文件
  13. 【分布式架构之旅 理论篇】数据库分库分表
  14. tecplot360的宏命令
  15. Flutter 2.5 的新特性
  16. 跨越适配性能那道坎,企鹅电竞Android weex优化
  17. 面向不平衡数据的电子病历自动分类研究
  18. cocos2dx3.17的csb文件使用方法
  19. throw e 和 return 的浅显理解
  20. activemq使用详解

热门文章

  1. 虚拟鼠标代替安卓触屏_美术学院18级虚拟空间设计专业数字图像程序基础课程优秀结课成果展示优秀学生王雨禾作品展示...
  2. matlab中的方波信号图片_基于Matlab的雷达信号处理仿真
  3. C++ cin.sync()和cin.ignore()
  4. oracle强制执行计划,OBA技能2-Oracle执行计划顺序表连接
  5. MATLAB figure中提取数据
  6. Multiavatar头像生成,要多少有多少
  7. python合并数组输出重复项_python - 不同数组项的所有可能组合[重复] - 堆栈内存溢出...
  8. mongo-express 远程代码执行漏洞(CVE-2019-10758)
  9. DVWA通关教程(中)
  10. Async Await