List Control(列表)排序,无需回调函数
2013-03-06 17:04
260 查看
前几天在要用一下list CONTROL 点击列表标题栏排序的功能,在网上搜索了很多,多数是要用到什么回调函数,搞了半天没有理解什么回调函数,所以就自己想了一个更易于理解的算法,与大家分享。
void CFindImageDlg::OnColumnclickListImage(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
selectcol = pNMListView->iSubItem;//获得当前所选列
int listcount;//总行数
listcount = m_list.GetItemCount();
CString temp0,temp1,temp2;
if(sortstyl==1){//sortstyl全局变量,int类型,初值为1
//典型的冒泡排序
for(int j = 1;j<=listcount;j++)
{
for(int i=0;i<listcount-j;i++)
{
temp1 = m_list.GetItemText(i,selectcol);
temp2 = m_list.GetItemText(i+1,selectcol);
if(temp1 > temp2)
{
for(int n=0;n<5;n++)//因为本列表为5列
{
temp1 = m_list.GetItemText(i,n);
temp2 = m_list.GetItemText(i+1,n);
m_list.SetItemText(i,n,temp2);
m_list.SetItemText(i+1,n,temp1);
}
}
}
}}
//还是冒泡排序,只是点击第二次时将换一种方式排,升序或降序
else if(sortstyl==-1)
{
for(int j = 1;j<=listcount;j++)
{
for(int i=0;i<listcount-j;i++)
{
temp1 = m_list.GetItemText(i,selectcol);
temp2 = m_list.GetItemText(i+1,selectcol);
if(temp2 > temp1)
{
for(int n=0;n<5;n++)
{
temp1 = m_list.GetItemText(i,n);
temp2 = m_list.GetItemText(i+1,n);
m_list.SetItemText(i,n,temp2);
m_list.SetItemText(i+1,n,temp1);
}
}
}
}}
sortstyl = sortstyl*(-1);//每点击一次sortstyl乘以负1,这样下次点击就换成另一种方式排序
*pResult = 0;
}
void CFindImageDlg::OnColumnclickListImage(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
selectcol = pNMListView->iSubItem;//获得当前所选列
int listcount;//总行数
listcount = m_list.GetItemCount();
CString temp0,temp1,temp2;
if(sortstyl==1){//sortstyl全局变量,int类型,初值为1
//典型的冒泡排序
for(int j = 1;j<=listcount;j++)
{
for(int i=0;i<listcount-j;i++)
{
temp1 = m_list.GetItemText(i,selectcol);
temp2 = m_list.GetItemText(i+1,selectcol);
if(temp1 > temp2)
{
for(int n=0;n<5;n++)//因为本列表为5列
{
temp1 = m_list.GetItemText(i,n);
temp2 = m_list.GetItemText(i+1,n);
m_list.SetItemText(i,n,temp2);
m_list.SetItemText(i+1,n,temp1);
}
}
}
}}
//还是冒泡排序,只是点击第二次时将换一种方式排,升序或降序
else if(sortstyl==-1)
{
for(int j = 1;j<=listcount;j++)
{
for(int i=0;i<listcount-j;i++)
{
temp1 = m_list.GetItemText(i,selectcol);
temp2 = m_list.GetItemText(i+1,selectcol);
if(temp2 > temp1)
{
for(int n=0;n<5;n++)
{
temp1 = m_list.GetItemText(i,n);
temp2 = m_list.GetItemText(i+1,n);
m_list.SetItemText(i,n,temp2);
m_list.SetItemText(i+1,n,temp1);
}
}
}
}}
sortstyl = sortstyl*(-1);//每点击一次sortstyl乘以负1,这样下次点击就换成另一种方式排序
*pResult = 0;
}
相关文章推荐
- ListControl 点击列头排序 详解
- C#对list列表进行随机排序的方法
- MFC列表控件(ListControl)
- Scala List的排序函数sortWith
- 《IOS_C语言》函数指针、函数回调、动态排序、函数返回值是函数指针
- 最简单的对Java List列表按中文拼音排序的实现方式
- Python中map()函数用法-对列表中每个元素做相同操作,并返回list
- 排序的list control
- MFC编程入门之二十八(常用控件:列表视图控件List Control上)
- 列表视图控件(List Control)
- [Python] 专题五.列表基础知识 二维list排序、获取下标和处理txt文本实例
- Python对list列表及子列表进行排序
- 解决DevExpress GridControl 用List无法在列表上添加新行问题
- (转载)VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
- Python sorted函数对列表排序
- 虚拟列表(virtual list control)
- C# apsx ListControl根据值选定列表项
- 确定多重选择列表控件 (List Control) 中的选定内容
- MFC列表(List Control)中添加项 第二节
- LINQ对List列表随机排序,取N条数据