CListCtrl 排序问题,请教,顺序老变?
声明的变量
int SortCol;//上次排列的 列号
int fAsc=1; //正向或反向排列
排列CALLBACK函数
int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl *pListCtrl = (CListCtrl*) lParamSort;
CString sA = (pListCtrl-> GetItemText(lParam1, 2));
CString sB = (pListCtrl-> GetItemText(lParam2, 2));
int iA=atoi(sA);
int iB=atoi(sB);
if(iA> iB)
return -1*fAsc;
else if(iA <iB)
return 1*fAsc;
else if(iA=iB)
return 0;
}
调用函数
if( pNMLV-> iSubItem == SortCol ) //如果当前选择的和老的一样 就相反方向,否则正向
fAsc *=-1;
else
{
fAsc=1;
SortCol = pNMLV-> iSubItem;
}
m_list.SortItems(MyCompareProc,(LPARAM)(&m_list));
[解决办法]
/*LPARAM lParam1, LPARAM lParam2 应该是指想date行的index???*/
用你上面的代码对listview排序,需要在每次排序前先将每个item的lParam参数重新设置为对应的序号才行。
[解决办法]
msdn:ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vclib/html/24a540d4-21af-48b5-abe2-77ac60ddbaa5.htm
Return Value
Nonzero if successful; otherwise zero.
注意:只有0与非0值区分.你在处理返回值上有问题