小第最近在做一个用户管理的列表框程序..使用CListCtrl控件的Report形式..所有用户使用一个PlayerNodeDef g_PlayerNode[MAX_PLAYER_NUM]数组进行管理..点击表头的时候来实现排序..         NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

int iSorted=-1;//排列序号 iSorted=pNMListView->iSubItem;
if(iSorted == 0 ||iSorted == 1 ||iSorted == 6  || iSorted == 4)
return; if(m_iSortCount%2 == 0)
{
m_UserList.SortItems((PFNLVCOMPARE)CompareFunc1,iSorted);//升序排列
} if(m_iSortCount%2 == 1)
{
m_UserList.SortItems((PFNLVCOMPARE)CompareFunc2,iSorted);//降序排列
}

m_iSortCount++; *pResult = 0;如上两个CompareFunc函数都已经写好了..而且也能正确的点击排序..但是因为用户数组是一直在变化的..经常需要删除某个元素和添加某个元素..添加元素是在数组最尾端添加..然后调用InsertItem插入到列表中..其中插入的lvitem.lParam参数为现在的用户数..也就是插入到了列表的最后..
删除元素是把数组从该元素开始后面的全部前移,然后把最后一个清0,列表那里调用DeleteItem来删除..现在问题是当数组不变化的时候能正确实现排序..当时当数组产生变化后再点击排序后就会混乱..
高分求解..感觉上应该是插入和删除的时候lvitem.lParam没有匹配起来