以下是我的代码,功能是点一下表头就会排序,但是我点击后排序是乱的,貌似只能排2个,怎样改才能排3个或着多个(我是以第一列排序的)
我不是用数据库做,信息都保存到txt文件里,比较急,希望能把代码写上来,谢谢!BOOL CListCtrl::SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData);int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
//以第一列为根据排序
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0); //比较两个数
LPCTSTR s1=(LPCTSTR)strItem1;
LPCTSTR s2=(LPCTSTR)strItem2;
int n1=atoi(s1);
int n2=atoi(s2);if (n1>n2)
return -1;
else
return 1;
}
void MyDlgModify::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_list1.SortItems( MyCompareProc, (DWORD)&m_list1 );
*pResult = 0;
}
我不是用数据库做,信息都保存到txt文件里,比较急,希望能把代码写上来,谢谢!BOOL CListCtrl::SortItems( PFNLVCOMPARE pfnCompare, DWORD dwData);int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
//以第一列为根据排序
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0); //比较两个数
LPCTSTR s1=(LPCTSTR)strItem1;
LPCTSTR s2=(LPCTSTR)strItem2;
int n1=atoi(s1);
int n2=atoi(s2);if (n1>n2)
return -1;
else
return 1;
}
void MyDlgModify::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_list1.SortItems( MyCompareProc, (DWORD)&m_list1 );
*pResult = 0;
}
// Sort the item in reverse alphabetical order.
static int CALLBACK
MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0); return strcmp(strItem2, strItem1);
}void snip_CListCtrl_SortItems()
{
// The pointer to my list view control.
CListCtrl* pmyListCtrl; // Sort the list view items using my callback procedure.
pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);
}MSDN的例子,可以参考一下
或者 CListCtrl::SetItemData(nItem, nItem) 设置lParam值
你上面的排序就可以用了