比较函数
static int CALLBACK MyCompareProc(LPARAM lParam11, LPARAM lParam12, LPARAM lParam1sort)
{
int row1=(int )lParam11;
int row2=(int )lParam12;
CListCtrl *lc =(CListCtrl *)lParam1sort;
CString lp1=lc->GetItemText(row1,sort_column);
CString lp2=lc->GetItemText(row2,sort_column);
if(sort_column==1)
if(method[sort_column])
{
method[sort_column]=1-method[sort_column];
return atoi(lp1)-atoi(lp2);
}
else
{
method[sort_column]=1-method[sort_column];
return atoi(lp2)-atoi(lp1);
}
else if(sort_column==2)
if(method[sort_column])
{
method[sort_column]=1-method[sort_column];
return (lp2);
}
else
{
method[sort_column]=1-method[sort_column];
return (lp1);
}
return 0;
}
事件响应函数
void CDiagameDlg::OnColumnclickList2(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
sort_column=pNMListView->iSubItem; // 取得需排序的列号
int count=m_listcontrol.GetItemCount();//行数
int i=0;
while(i<3) // 点击第i列后,若method[i]=1时,第i列顺序(逆序)排列,再点击后逆序(顺序)排列,依次循环
{
method[i]=1;
i++;
}
for(i=0;i<count;i++)
m_listcontrol.SetItemData(i,i); // 设置比较关键字
m_listcontrol.SortItems(MyCompareProc,(DWORD_PTR)&m_listcontrol);
*pResult = 0;
}
以上为我写的函数,我的表头有三列,想实现的目的是 点击表头实现一次排序,逆序和顺序交替:可是却实现不了我的效果,现在主要问题有两个:
1,第一列无论如何无法实现排序,自己猜想是和 上贴中 红色代码有关,即第一列和其他列数据的插入方法不一样,应该导致了对应属性的某种差别吧。。
2,其他两列点击后的排序非常奇怪,例如,输入数据为“22 88 11 00 44 88 33”,点击一次后排序为“22 00 88 11 88 33 44”再点击一次后为“11 88 22 44 00 88 33”然后为“44 00 33 22 88 11 88”.。。。。完全不知道这么混乱的原因啊,还有时候会出现 两种序列的交替,但是也不是顺序或者逆序,
求大神指点啊。。。
</count;i++)