可能是m_nSortFlag没赋初直,单击还是不能排序。错在哪?//这是ListCtrl的onColumnclick事件
//m_Ctrl_CommonRec是ListCtrl对象
//UINT m_nCmpIndex;      //某个Column的Index,这列是进行排序的列
//int  m_nSortFlag;      //切换升序和降序,在1和-1之间切换
void CListTable::OnItemclickListCommonrec(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
UINT m_nCmpIndex;
int  m_nSortFlag;
// TODO: Add your control notification handler code here
    //对第几个Column下的字段进行排序
    m_nCmpIndex = pNMListView->iSubItem; 
    //在升序和降序之间切换
    m_nSortFlag>0? m_nSortFlag = -1: m_nSortFlag = 1;
    //排序,传递一个函数指针以及对话框的指针
m_Ctrl_CommonRec.SortItems(CompareProc, (LPARAM)this);
    //排序以后重新设置在InsertItem的时候传入LVITEM结构里的lParam参数
    for (int i=0; i<m_Ctrl_CommonRec.GetItemCount(); i++)
        m_Ctrl_CommonRec.SetItemData(i, i); 
*pResult = 0;
}
//回调函数,用来比较两个Item的
int CALLBACK CListTable::CompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    //得到m_Ctrl_CommonRec的指针
  CListCtrl* pListCtrl = (CListCtrl*)(&((CListTable *)lParamSort)->m_Ctrl_CommonRec);
  CString    strItem1 = pListCtrl->GetItemText(lParam1, 
      ((CListTable *)lParamSort)->m_nCmpIndex);
  CString    strItem2 = pListCtrl->GetItemText(lParam2, 
      ((CListTable *)lParamSort)->m_nCmpIndex);  return strcmp(strItem2, strItem1)*(((CListTable *)lParamSort)->m_nSortFlag);
}