int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    CSortList* pV=(CSortList*)lParamSort;
lParam2=(!lParam1);
CListCtrl::SetItemData(pV->m_nSortedCol, (DWORD)&m_list1);
    CString strItem1, strItem2;
    LVFINDINFO info;
    int nIndex;
    info.flags = LVFI_PARAM;LVFINDINFO    info.lParam = lParam1;    //由item data(lParam1)得到对应的item text
    if ( (nIndex=pV->FindItem(&info)) != -1)
        strItem1 = pV->GetItemText(nIndex, pV->m_nSortedCol);    info.lParam = lParam2;    //由item data(lParam2)得到对应的item text
    if ( (nIndex=pV->FindItem(&info)) != -1)
        strItem2 = pV->GetItemText(nIndex, pV->m_nSortedCol);
    
       int iCompRes = strcmp(strItem1, strItem2);
    
    //根据当前的排序方式进行调整
    if(pV->m_fAsc)
        return iCompRes;
    else
        return iCompRes*-1;
}
void CStudentdlg::OnColumnclickList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if( pNMListView->iSubItem == m_list1.m_nSortedCol )
m_list1.m_fAsc = !m_list1.m_fAsc;

else
{
m_list1.m_fAsc = TRUE;
m_list1.m_nSortedCol = pNMListView->iSubItem;

}
m_list1.SortItems( ListCompare, (DWORD)&m_list1); 
*pResult = 0;
}这个也是我在网上查来的,用在了我的程序上,还是有些问题,有些地方也不太明白比如说  lParam1 lParam2 这两个参数是做什么的,为什么我调试的时候发现他们返回的值都是0,
排序结果不正确,谁能告诉我是哪出错了?