您的位置:首页 > 其它

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: