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. 浏览器兼容问题IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
  2. 用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)...
  3. ABP学习 解决:Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题...
  4. Cron表达式【一】
  5. wso2 esb_WSO2 ESB的一种消息传递方式
  6. 什么是业务运维,企业如何实现互联网+业务与IT的融合
  7. 基础算法 —— 贪心算法
  8. si4438 与 si4432通讯
  9. python分行打印list_python怎么打印list-问答-阿里云开发者社区-阿里云
  10. fft python 举例_Python FFT合成波形的实例
  11. unity3d 中加入�视频
  12. idea 设置代码的颜色
  13. 计算机设备没有音频,计算机上没有音频设备是什么意思?
  14. 【axure教程】产品流程图的制作方法详解
  15. Java项目(SpringBoot+MyBatis-Plus):国内新冠肺炎疫情大数据可视化平台+疫情数据后台管理系统
  16. UML图箭头和实线虚线到底什么意思
  17. 《刻意练习——如何从新手到大师》——创造天才
  18. jieba分词原理 ‖ 关键词抽取
  19. iphone 控制android手机,如何从Apple手机远程控制Android手机
  20. Win10配置adb环境

热门文章

  1. Ubuntu 12.04下安装Oracle Express 11gR2
  2. libuv 原理_Libuv初理解
  3. jquery select change事件_jQuery实现省市联动效果
  4. linux操作系统2试题,RedHat Linux 9.0 操作系统测试题2
  5. 产品认知:如何选择产品经理的产品方向?
  6. Servlet拦截器
  7. 服务器系统巡检记录表,服务器月度巡检记录
  8. c语言程序运行结果怎么看,帮忙看看我这个C语言程序有什么错误,运行结果不正确...
  9. 【TypeScript系列教程03】基础语法
  10. altium designer 10哪个作者写的好 。