再谈VC++中ListControl排序[原创]
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排序[原创]相关推荐
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的" ...
- 浅谈VC中使用Qt库之三
前面我们讲到在VC中直接使用Qt,这种方法将Qt和VC代码混在一起,感觉不伦不类,更好的方法是将这些界面封装在库中,vc通过加载dll的方式来使用. 1.首先创建一个win32 项目->选择动态 ...
- 再谈C#中的委托和事件
写在最前 我相信全网关于委托和事件的文章和概述,大家应该已经读过很多篇.但是就我的观察来看,大多数文在讲述这方面概念时,都会用烧开水和狗叫主人的例子来讲述事件怎么工作,这样比喻固然与生活联系紧密,但看 ...
- 浅谈 Java 中的排序
前言 进来不要失望,这不是一篇讲排序算法的文章.而是简要介绍 Java 中排序相关的类Comparator.Comparable以及Collections.sort的使用. 写程序分为10个阶段:使用 ...
- JVM系列之:再谈java中的safepoint
文章目录 safepoint是什么 safepoint的例子 线程什么时候会进入safepoint safepoint是怎么工作的 总结 safepoint是什么 java程序里面有很多很多的java ...
- NET Core微服务之路:再谈分布式系统中一致性问题分析
前言 一致性:很多时候表现在IT系统中,通常在分布式系统中,必须(或最终)为多个节点的数据保持一致.世间万物,也有存在相同的特征或相似,比如儿时的双胞胎,一批工厂流水线的产品,当然,我们不去讨论非IT ...
- 瓦伦达心态——再谈工作中的专注和心态
瓦伦达心态讲的是一个故事:瓦伦达是美国一个著名的高空走钢索的表演者,他在一次重大的表演中,不幸失足身亡.他的妻子事后说,我知道这一次一定要出事,因为他上场前总是不停地说,这次太重要了,不能失败:而以前 ...
- 再谈机器学习中的归一化方法(Normalization Method)
机器学习.数据挖掘工作中,数据前期准备.数据预处理过程.特征提取等几个步骤几乎要花费数据工程师一半的工作时间.同时,数据预处理的效果也直接影响了后续模型能否有效的工作.然而,目前的大部分学术研究主要集 ...
- 移花接木—— 再谈javascript中的 call 与 apply
2019独角兽企业重金招聘Python工程师标准>>> 在JavaScript中,call 和 apply 是Function对象自带的两个方法,这两个方法的主要作用是改变函数中的t ...
最新文章
- 浏览器兼容问题IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
- 用Python3、NetCore、Shell分别开发一个Ubuntu版的定时提醒(附NetCore跨平台两种发布方式)...
- ABP学习 解决:Update-Database : 无法将“Update-Database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称的问题...
- Cron表达式【一】
- wso2 esb_WSO2 ESB的一种消息传递方式
- 什么是业务运维,企业如何实现互联网+业务与IT的融合
- 基础算法 —— 贪心算法
- si4438 与 si4432通讯
- python分行打印list_python怎么打印list-问答-阿里云开发者社区-阿里云
- fft python 举例_Python FFT合成波形的实例
- unity3d 中加入�视频
- idea 设置代码的颜色
- 计算机设备没有音频,计算机上没有音频设备是什么意思?
- 【axure教程】产品流程图的制作方法详解
- Java项目(SpringBoot+MyBatis-Plus):国内新冠肺炎疫情大数据可视化平台+疫情数据后台管理系统
- UML图箭头和实线虚线到底什么意思
- 《刻意练习——如何从新手到大师》——创造天才
- jieba分词原理 ‖ 关键词抽取
- iphone 控制android手机,如何从Apple手机远程控制Android手机
- Win10配置adb环境
热门文章
- Ubuntu 12.04下安装Oracle Express 11gR2
- libuv 原理_Libuv初理解
- jquery select change事件_jQuery实现省市联动效果
- linux操作系统2试题,RedHat Linux 9.0 操作系统测试题2
- 产品认知:如何选择产品经理的产品方向?
- Servlet拦截器
- 服务器系统巡检记录表,服务器月度巡检记录
- c语言程序运行结果怎么看,帮忙看看我这个C语言程序有什么错误,运行结果不正确...
- 【TypeScript系列教程03】基础语法
- altium designer 10哪个作者写的好 。