博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 简单实现MFC ListControl 点击列头排序
阅读量:7048 次
发布时间:2019-06-28

本文共 1347 字,大约阅读时间需要 4 分钟。

说明:

SetItemData可以为每一行绑定一个DWORD类型的变量。用GetItemData可以获得这个变量。

举个例子,假设CListCtrl中你需要显示某个数据表中的记录,该表有个流水号主键ID,一般这个ID值本身没有什么意义,用户也不需要看,因此在CListCtrl的可见列中,你不需要显示。但往往做具体查询等操作时,你又需要用这个ID来完成。这时,用SetItemData将其绑定到每一行,将非常方便,用户操作哪一行,则用GetItemData可以得到对应记录的ID,直接用来做操作,很爽。
由于绑定的是DWORD类型,因此还有一个扩展作用是绑定一个指针对象。比如这里我不再是一个ID主键了,而是需要关联一个数据结构,那么就可以把该数据结构对象的指针进行SetItemData绑定。这么做,可以省去再到一堆的数据结构数组中去查找的过程。

 

第一步:

定义全局变量:

int sort_column; // 记录点击的列

bool method; // 记录比较方法

第二步:

添加比较函数

// 比较函数2staticint CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort){// 从参数中提取所需比较lc的两行数据int row1 = (int) lParam1;int row2 = (int) lParam2; CListCtrl* lc = (CListCtrl*)lParamSort;CString lp1 = lc->GetItemText(row1,sort_column);CString lp2 = lc->GetItemText(row2,sort_column); // 比较,对不同的列,不同比较,注意记录前一次排序方向,下一次要相反排序 if (sort_column<2){// int型比较 if (method) return atoi(lp1)-atoi(lp2); else return atoi(lp1)-atoi(lp1);}else{// 文字型比较 if (method)return lp1.CompareNoCase(lp2); else return lp2.CompareNoCase(lp1); } return0; }

第三步:添加列头点击事件  Lvn_Columnclick

void ClistDlg::OnLvnColumnclickxxx(NMHDR *pNMHDR, LRESULT *pResult){LPNMLISTVIEW pNMLV = reinterpret_cast
(pNMHDR);// TODO: 在此添加控件通知处理程序代码sort_column = pNMLV->iSubItem;//点击的列int count = m_list_port.GetItemCount();for (int i=0;i

完成。

method是用来控制顺序逆序的,看个人情况设置。

转载于:https://www.cnblogs.com/lujin49/p/4556912.html

你可能感兴趣的文章
centos 安装使用 rar
查看>>
【C++】冒泡排序、插入排序、快速排序
查看>>
云计算,你必须知道云计算的硬件设施
查看>>
浅谈 Event Loop
查看>>
华硕手机平板PadFone配四核处理器
查看>>
Ext-js使用指南(总结)
查看>>
正则表达式的奥秘
查看>>
MySQL学习笔记
查看>>
CustomValidator 的应用
查看>>
Java基础问题10问
查看>>
SQL Serever学习6——数据表
查看>>
洛谷——P1462 通往奥格瑞玛的道路
查看>>
MySql的安装
查看>>
hdoj2003解题报告
查看>>
越学越迷茫
查看>>
[noip模拟]水灾<BFS>
查看>>
PSP(5.4——5.10)以及周记录
查看>>
Python设计模式——建造者模式
查看>>
JQuery快速入门
查看>>
machine learning----->有监督学习和无监督学习的区别
查看>>