ListControl 点击列头排序 详解
来源:互联网 发布:mac word 文字竖排 编辑:程序博客网 时间:2024/05/24 07:39
第一步:
定义全局变量:
int sort_column; //
bool method; //
第二步:
添加比较函数
1 // 比较函数
2 staticintCALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
3 {
4
5 //从参数中提取所需比较lc的两行数据
6
7 introw1 = (int) lParam1;
8 introw2 = (int) lParam2;
9
10 CListCtrl*lc = (CListCtrl*)lParamSort;
11
12 CString lp1= lc->GetItemText(row1,sort_column);
13 CString lp2= lc->GetItemText(row2,sort_column);
14
15
16 //比较,对不同的列,不同比较,注意记录前一次排序方向,下一次要相反排序
17
18 if(sort_column<2)
19 {
2 staticintCALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
3 {
4
5 //从参数中提取所需比较lc的两行数据
6
7 introw1 = (int) lParam1;
8 introw2 = (int) lParam2;
9
10 CListCtrl*lc = (CListCtrl*)lParamSort;
11
12 CString lp1= lc->GetItemText(row1,sort_column);
13 CString lp2= lc->GetItemText(row2,sort_column);
14
15
16 //比较,对不同的列,不同比较,注意记录前一次排序方向,下一次要相反排序
17
18 if(sort_column<2)
19 {
// int型比较
20 if(method)
21 returnatoi(lp1)-atoi(lp2);
22 else
23 returnatoi(lp1)-atoi(lp1);
24 }
25 else
26 {
20 if(method)
21 returnatoi(lp1)-atoi(lp2);
22 else
23 returnatoi(lp1)-atoi(lp1);
24 }
25 else
26 {
// 文字型比较
27 if(method)
28 returnlp1.CompareNoCase(lp2);
29 else
30 returnlp2.CompareNoCase(lp1);
31 }
32
33 return0;
34 }
27 if(method)
28 returnlp1.CompareNoCase(lp2);
29 else
30 returnlp2.CompareNoCase(lp1);
31 }
32
33 return0;
34 }
第三步:添加列头点击事件
void ClistDlg::OnLvnColumnclickxxx(NMHDR*pNMHDR, LRESULT*pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
sort_column = pNMLV->iSubItem;//点击的列
int count= m_list_port.GetItemCount();
for (inti=0;i<count;i++)
m_list_port.SetItemData(i,i); // 每行的比较关键字,此处为列序号(点击的列号),可以设置为其他比较函数的第一二个参数
m_list_port.SortItems(MyCompareProc,(DWORD_PTR)&m_list_port);//排序第二个参数是比较函数的第三个参数
*pResult=0;
}
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
sort_column = pNMLV->iSubItem;//点击的列
int count= m_list_port.GetItemCount();
for (inti=0;i<count;i++)
m_list_port.SetItemData(i,i); // 每行的比较关键字,此处为列序号(点击的列号),可以设置为其他比较函数的第一二个参数
m_list_port.SortItems(MyCompareProc,(DWORD_PTR)&m_list_port);//排序第二个参数是比较函数的第三个参数
*pResult=0;
}
完成。
method是用来控制顺序逆序的,看个人情况设置。
转载自:http://blog.sina.com.cn/s/blog_5dc7bbf8010115ak.html
- ListControl 点击列头排序 详解
- MFC ListControl 点击列头排序
- 简单实现MFC ListControl 点击列头排序
- 简单实现MFC ListControl 点击列头排序
- ListView点击列头排序
- ListView点击列头排序
- gridview点击列头排序
- C# ListView点击列头进行排序
- 关于GridView点击列头排序
- ListView点击列头排序功能实现
- C# listview 点击列头排序
- Delphi listview 点击列头排序
- WPF ListView 点击列头排序之数据排序
- 重写ListView控件,实现点击列头排序的功能
- [WPF]ListView点击列头排序功能实现
- HTML中点击TABLE列头实现排序功能
- DataGridView控件点击表列头进行多列关联排序
- MVC显示表格,点击列头可以排序
- Web.XML 配置详解 (转)
- 判定德州扑克的牌型
- Silverlight实例教程 - Out of Browser存取本地文件系统
- HDU-1160 FatMouse's Speed
- Silverlight实例教程 - Out of Browser与COM的交互基础
- ListControl 点击列头排序 详解
- ListActivity的使用
- C++,string中包含中文和英文以及其他语言文字,怎么可以分出中文字符和英文字符。
- Silverlight实例教程 - Out of Browser与Office的互操作
- NYOJ16-矩形嵌套(DAG图动态规划)
- MySQL数据库按指定格式导出、导入数据
- Silverlight实例教程 - Out of Browser的Debug和Notifications窗口
- html常用标记/元素 练习
- Silverlight实例教程 - Out of Browser音乐播放器