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

解决方案 »

  1.   

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