再谈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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uva 11572 ——Unique Snowflakes

题意&#xff1a;给定一个序列&#xff0c;然后在这个序列找到一个连续的串&#xff0c;使得串中没有重复的元素。 思路&#xff1a;单调队列。每次都把该在序列没出现的数加入到序列中&#xff0c;然后向后扫描找到最大的ans。 code&#xff1a; //#incllude <bits/stdc.h&…

使用.NET类库操作CSV文件

CSV文件&#xff0c;是指使用逗号对数据进行分割的文本数据文件。昨天有人提出了一个问题&#xff0c;就是怎么对CSV文件进行操作&#xff0c;并且给出了一个类的定义。我根据这个类定义实现了一个能够读些CSV文件的类。由于涉及到了字符串操作&#xff0c;为了提高查询、替换性…

uva 11054——Wine trading in Gergovia

题意&#xff1a;有n个村庄&#xff0c;每个村庄要么买酒&#xff08;&#xff09;&#xff0c;要么卖酒&#xff08;-&#xff09;&#xff0c;要求供需平衡&#xff0c;求最小代价&#xff08;代价k为把k个单位的酒运到相邻的村庄&#xff09;。 思路&#xff1a;贪心。可以把…

uva 1312——Cricket Field

题意&#xff1a;在w*h的方格内&#xff0c;找出一个最大的正方形&#xff0c;使得正方形内没有点&#xff08;可以在边界有点&#xff09;。 思路&#xff1a;枚举。正方形可以看作是矩形&#xff0c;只不过在取的时候取最短的那条边作为边长&#xff0c;那么枚举出短边最大的…

【操作系统】页面置换算法

页面置换算法 在进程运行过程中&#xff0c;若需要访问的物理块不在内存中&#xff0c;就需要通过一定的方式来将页面载入内存&#xff0c;而此时内存很可能已无空闲空间&#xff0c;因此就需要一定的算法来选择内存中要被置换的页面&#xff0c;这种算法就被称为页面置换算法。…

uva 1617——Laptop

题意&#xff1a;有n个长度为1的线段&#xff0c;确定它们的起点&#xff0c;使得第i个线段在【ri&#xff0c;di】之间&#xff0c;输出空隙数目的最小值。 思路&#xff1a;贪心。首先对区间进行排序&#xff0c;然后扫描一遍&#xff0c;当上一个线段最右边加1《当前最左的点…

ubuntu18.04安装、配置dosbox

1 安装dosbox&#xff1a;打开终端&#xff0c;输入&#xff1a; sudo apt install dosbox 2 安装完成后&#xff0c;启动dosbox&#xff0c;在终端输入&#xff1a; dosbox 3 设置自动挂载 退出dosbox&#xff0c;在终端中输入&#xff1a; vim .dosbox/dosbox-0.74.con…

关于 SENDKEYS 的代码

sendkeys 的用法&#xff08;MSDN&#xff09;&#xff1a; SendKeys 语句 将一个或多个按键消息发送到活动窗口&#xff0c;就如同在键盘上进行输入一样。 语法 SendKeys string[, wait] SendKeys 语句的语法具有以下几个命名参数&#xff1a; 部分描述string必需的。字符串表…

uva 1615——Highway

题意&#xff1a; 给定平面上n个点&#xff0c;和一个值D&#xff0c;要求在x轴上选出尽量少的点&#xff0c;使得对给定的点&#xff0c;都有一个点离他的欧几里德距离步超过D。 思路&#xff1a;区间覆盖问题。以平面上的点为圆心&#xff0c;以D为半径&#xff0c;求出来一个…

解决linux写入ntfs盘时报错:只读文件系统

[2018.10.28 更新] 可能因为在挂载wimdows盘后&#xff0c;强制关机造成的&#xff0c;可使用 sudo ntfsfix /dev/*** 来修复。其中&#xff0c;***为具体哪个盘&#xff0c;例如sudo ntfsfix /dev/sda4 之前一直可以对windows盘进行读写操作&#xff0c;但今天突然不能用了&am…

家里装AD了

通过关系&#xff0c;家里终于装上了ADSL&#xff0c;而且还是130包月的&#xff0c;还免了调测费转载于:https://www.cnblogs.com/d9394/archive/2005/09/28/10611828.html

uva 1613——K-Graph Oddity

题意&#xff1a;输入n个点m条边的联通图&#xff0c;n为奇数&#xff0c;设k为最小的奇数&#xff0c;使得每个点的度数不超过k&#xff0c;要求把节点都涂上颜色&#xff0c;使得相邻节点颜色不一样。 思路&#xff1a;dfs。k的值为奇数&#xff0c;所以k为节点最大度数&…

应用ADO.net得到表

----------------------------------------------------------开发者&#xff1a;开发时间&#xff1a;2004.9.9功能&#xff1a;应用ADO.net得到表----------------------------------------------------------Imports Zy_DataAccessImports SystemImports System.DataImports…

uva 11093——Just Finish it up

题意&#xff1a;环形跑道上有n个加油站&#xff0c;每个站可以加pi单位的油&#xff0c;从当前站开到下一站需要qi的油&#xff0c;问是否能够环游一圈。 思路&#xff1a;枚举。首先如果总需求量>总供给量&#xff0c;那么不可能。否则就枚举起点&#xff0c;如果油箱里的…

【计算机网络】TCP IP通信处理过程

1.数据包首部 每个分层中都会对所发送的数据附加一个首部&#xff0c;其中包含了该层必要的信息&#xff0c;如发送端地址、接收端地址以及协议等相关信息。 2.发送数据包 1&#xff09;应用程序处理 进行编码处理&#xff08;相当于表示层功能&#xff09;&#xff0c;管…

感觉自己越来越浮躁

重新审视自己的技术走向&#xff0c;不得不承认&#xff0c;越来越向上层迈进。但是这不是我喜欢的&#xff0c;一味的追求快速开发&#xff0c;希望自己的开发速度能一个人顶10个人&#xff0c;但是往往容易在项目中迷失自己&#xff0c;很希望能快点结束这段噩梦般的项目&…

uva 12627——Erratic Expansion

题意&#xff1a;一开始有1个红气球&#xff0c;每小时一个红气球都会变成3个红气球和1个蓝气球&#xff0c;1个蓝气球会变成4个蓝气球&#xff0c;问k个小时后a行到b行的红气球的数量。 思路&#xff1a;递推。a为偶数时&#xff0c;计算a1到b以及a本行的红气球数。b为奇数时&…

【计算机网络】数据链路相关技术

1.MAC地址 MAC地址长48字节。在使用网卡的情况下&#xff0c;一般会将MAC地址烧入到ROM中&#xff0c;任何一个网卡的MAC地址都是唯一的。例如 00:10:5A:70:33:61 MAC地址的3~24位表示厂商识别码&#xff0c;每个NIC厂商都有特定唯一的识别数字。25~48位是厂商内部为识别每个…

uva 714——Copying Books

题意&#xff1a;把一个m个整数的序列划分成k个连续非空的子序列&#xff0c;使得子序列和的最大值最小。 思路&#xff1a;二分。遇到最大值最小大多都二分了&#xff0c;让划分的子序列都不超过x&#xff0c;根据x来judge最终结果k个是多还是少&#xff0c;然后二分来调整x直…

[JavaScript]让footer总是停留在页面的底部(footer all the way at the bottom of the page)

在网页的底部总是保留着公司的版本信息&#xff0c;如何是这部分信息来实现呢&#xff1f;下面的一段javascript演示了如何让footer总是停留在页面的底部。这段代码我在实际使用的时候不是特别的完美&#xff0c;在包含有其他javascript控制的页面和控件的时候会出现重叠的现象…