我看了网上一个关于listCtrl控件自排序的代码,测试的时候发现,只能对一列排序,也就是对名称
排序,对于文件的大小和修改时间都不能实现。也就是点击列标题的时候,不管是点的哪个,都是对名称排序,这是怎么回事呀?
int CALLBACK CClistCtrl::ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CClistCtrl* pList=(CClistCtrl*)lParamSort;
int nItem1, nItem2; LVFINDINFO FindInfo;
FindInfo.flags = LVFI_PARAM; FindInfo.lParam = lParam1;
nItem1 = pList->FindItem(&FindInfo,0); FindInfo.lParam = lParam2;
nItem2 = pList->FindItem(&FindInfo, -1); if((nItem1 == -1) || (nItem2 == -1))
{
TRACE("无法找到!/n");
return 0;
} CString Str1,Str2;
CString StrInt1 = pList->GetItemText(nItem1, pList->m_nSortedCol); CString StrInt2 = pList->GetItemText(nItem2, pList->m_nSortedCol);
int iCompRes = 0;
if(pList->m_nSortedCol==0||pList->m_nSortedCol==2) //如果按名称或者类型排序
{
Str1=StrInt1.MakeUpper();
Str2=StrInt2.MakeUpper();
if(Str1>Str2)
iCompRes = 1;
else if(Str1 == Str2)
iCompRes = 0;
else
iCompRes = -1;
}
else if(pList->m_nSortedCol==1) //如果按大小排序
{
int S1=atoi(StrInt1.GetBuffer(StrInt1.GetLength()));
int S2=atoi(StrInt2.GetBuffer(StrInt2.GetLength()));
if(S1 > S2)
iCompRes = 1;
else if(S1 == S2)
iCompRes = 0;
else
iCompRes = -1;
}
else if(pList->m_nSortedCol==3) //如果按修改时间排序
{
StrInt1.Remove('-');
StrInt2.Remove('-');
StrInt1.Remove(' ');
StrInt2.Remove(' ');
StrInt1.Remove(':');
StrInt2.Remove(':');
Str1=StrInt1.MakeUpper();
Str2=StrInt2.MakeUpper();
if(Str1 > Str2)
iCompRes = 1;
else if(Str1 == Str2)
iCompRes = 0;
else
iCompRes = -1;
}
if(pList->m_bAsc)
return iCompRes;
else
return iCompRes*-1;
return 0;
}
排序,对于文件的大小和修改时间都不能实现。也就是点击列标题的时候,不管是点的哪个,都是对名称排序,这是怎么回事呀?
int CALLBACK CClistCtrl::ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CClistCtrl* pList=(CClistCtrl*)lParamSort;
int nItem1, nItem2; LVFINDINFO FindInfo;
FindInfo.flags = LVFI_PARAM; FindInfo.lParam = lParam1;
nItem1 = pList->FindItem(&FindInfo,0); FindInfo.lParam = lParam2;
nItem2 = pList->FindItem(&FindInfo, -1); if((nItem1 == -1) || (nItem2 == -1))
{
TRACE("无法找到!/n");
return 0;
} CString Str1,Str2;
CString StrInt1 = pList->GetItemText(nItem1, pList->m_nSortedCol); CString StrInt2 = pList->GetItemText(nItem2, pList->m_nSortedCol);
int iCompRes = 0;
if(pList->m_nSortedCol==0||pList->m_nSortedCol==2) //如果按名称或者类型排序
{
Str1=StrInt1.MakeUpper();
Str2=StrInt2.MakeUpper();
if(Str1>Str2)
iCompRes = 1;
else if(Str1 == Str2)
iCompRes = 0;
else
iCompRes = -1;
}
else if(pList->m_nSortedCol==1) //如果按大小排序
{
int S1=atoi(StrInt1.GetBuffer(StrInt1.GetLength()));
int S2=atoi(StrInt2.GetBuffer(StrInt2.GetLength()));
if(S1 > S2)
iCompRes = 1;
else if(S1 == S2)
iCompRes = 0;
else
iCompRes = -1;
}
else if(pList->m_nSortedCol==3) //如果按修改时间排序
{
StrInt1.Remove('-');
StrInt2.Remove('-');
StrInt1.Remove(' ');
StrInt2.Remove(' ');
StrInt1.Remove(':');
StrInt2.Remove(':');
Str1=StrInt1.MakeUpper();
Str2=StrInt2.MakeUpper();
if(Str1 > Str2)
iCompRes = 1;
else if(Str1 == Str2)
iCompRes = 0;
else
iCompRes = -1;
}
if(pList->m_bAsc)
return iCompRes;
else
return iCompRes*-1;
return 0;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货