这是网上的一段排序的代码 (参照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
希望高手能帮忙解决下问题~~
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
希望高手能帮忙解决下问题~~
先解决这个再说,
m_list.SortItems((PFNLVCOMPARE)CompareFunc,iSorted); 参数类型不对唉
NMLISTVIEW* pNMListView = (NMLISTVIEW*)pNMHDR;
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));}
CompareFunc 加static试试。如果不行的话请仔细检查CompareFunc和PFNLVCOMPARE的定义是否一致
CListCtrl::SortItemsBOOL SortItems(PFNLVCOMPARE pfnCompare,DWORD dwData)返回值:
如果成功,则返回非零值,否则为0。参数: pfnCompare 应用定义的比较函数的地址。当需要比较两个列表项的相互关系而进行排序操作时,则调用比较函数。比较函数要么是类的静态成员,要么是不属于任何类的独立函数。
dwData 应用定义的、传递给比较函数的值。 说明:
使用应用定义的比较函数对列表视图项进行排序。为了影响新的次序,每一项的索引需要做一些改变。
比较函数有下列形式:
int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort);
如果第一项在第二项之前,则返回一个负值;若第一项在第二项之后,则返回一个正值;如果两者等价;则返回零。
参数lParam1和lParam2指定了要进行比较的两项的数据,而参数lParamSort与dwData值相同。