这是网上的一段排序的代码 (参照http://www.4oa.com/Article/html/6/32/474/2005/16682_3.html)
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
static int iSorted=-1;//排列序号if (pNMListView->iSubItem==iSorted) return;iSorted=pNMListView->iSubItem;m_list.SortItems((PFNLVCOMPARE)CompareFunc,iSorted);
 
 *pResult = 0;
我也大概了解了下NMHDR结构
下面是报错
Error 1 error C2065: 'pNMHDR' : undeclared identifier
Error 2 error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'PFNLVCOMPARE'
Error 3 error C2065: 'pResult' : undeclared identifier
希望高手能帮忙解决下问题~~

解决方案 »

  1.   

    1。pNMHDR 末定义
    先解决这个再说,
    m_list.SortItems((PFNLVCOMPARE)CompareFunc,iSorted); 参数类型不对唉
      

  2.   

    NM_LISTVIEW写错了。改成:
    NMLISTVIEW* pNMListView = (NMLISTVIEW*)pNMHDR;
      

  3.   

    第一和第三个错我知道出在哪了。就剩下第二个错了,错出在下面这句
    m_list.SortItems((PFNLVCOMPARE)CompareFunc,iSorted);
    这是回调函数
    int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2,LPARAM lParamSort)

    char *text1,*text2;
    switch (lParamSort){
    case 0:
    text1=Sps[lParam1].szPm;
    text2=Sps[lParam2].szPm;
    break;case 1:
    text1=Sps[lParam1].szSl;
    text2=Sps[lParam2].szSl;
    break;case 2:
    text1=Sps[lParam1].szDj;
    text2=Sps[lParam2].szDj;
    break;case 3:
    text1=Sps[lParam1].szJe;
    text2=Sps[lParam2].szJe;
    break;
    default:
    break;}

    return (strcmp(( char*)text1,( char*)text2));}
      

  4.   


    CompareFunc 加static试试。如果不行的话请仔细检查CompareFunc和PFNLVCOMPARE的定义是否一致
      

  5.   

    书上是这样说的
    CListCtrl::SortItemsBOOL SortItems(PFNLVCOMPARE pfnCompare,DWORD dwData)返回值:
    如果成功,则返回非零值,否则为0。参数: pfnCompare 应用定义的比较函数的地址。当需要比较两个列表项的相互关系而进行排序操作时,则调用比较函数。比较函数要么是类的静态成员,要么是不属于任何类的独立函数。  
    dwData 应用定义的、传递给比较函数的值。  说明:
    使用应用定义的比较函数对列表视图项进行排序。为了影响新的次序,每一项的索引需要做一些改变。
    比较函数有下列形式:
    int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort);
    如果第一项在第二项之前,则返回一个负值;若第一项在第二项之后,则返回一个正值;如果两者等价;则返回零。
    参数lParam1和lParam2指定了要进行比较的两项的数据,而参数lParamSort与dwData值相同。