我看了网上一个关于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;
}