读书人

CListCtrl 排序有关问题,请问,顺序老

发布时间: 2012-01-30 21:15:58 作者: rapoo

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值区分.你在处理返回值上有问题

读书人网 >VC/MFC

热点推荐