问题是在排序时要取出lparam1和lparam2来比较,但我取出来的是空的,不懂为什么?CTest2Dlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; m_list.SortItems(compareFunction,DWORD(this));//m_list已经与listcontrol控件绑定。 *pResult = 0;
}int CALLBACK CTest2Dlg::compareFunction(LPARAM lparam1,LPARAM lparam2,LPARAM lparamSort)
{
CListCtrl * pListCtrl = reinterpret_cast<CListCtrl*>(lparamSort);
CString lp1 = pListCtrl->GetItemText(lparam1,0);//lp1是空的
CString lp2 = pListCtrl->GetItemText(lparam2,0);//lp2也是空的
AfxMessageBox(lp1);//还是空的
return strcmp(lp2,lp1);
}
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; m_list.SortItems(compareFunction,DWORD(this));//m_list已经与listcontrol控件绑定。 *pResult = 0;
}int CALLBACK CTest2Dlg::compareFunction(LPARAM lparam1,LPARAM lparam2,LPARAM lparamSort)
{
CListCtrl * pListCtrl = reinterpret_cast<CListCtrl*>(lparamSort);
CString lp1 = pListCtrl->GetItemText(lparam1,0);//lp1是空的
CString lp2 = pListCtrl->GetItemText(lparam2,0);//lp2也是空的
AfxMessageBox(lp1);//还是空的
return strcmp(lp2,lp1);
}
中lparam1和lparam2的值。
The lParam1 and lParam2 parameters specify the item data for the two items being compared. The lParamSort parameter is the same as the dwData value.LPARAM lparam1,LPARAM lparam2 是Item的 Data, 不是索引(Index)需要对每个Item调用 CListCtrl::SetItemData 才有值
CListCtrl::SetItemData
void CTest2Dlg::OnButton2()
{
m_list.InsertItem(0,"raven");
m_list.SetItemText(0,1,"boy");
m_list.SetItemText(0,2,"18"); m_list.InsertItem(1,"candy");
m_list.SetItemText(1,1,"girl");
m_list.SetItemText(1,2,"17"); m_list.InsertItem(2,"jack");
m_list.SetItemText(2,1,"boy");
m_list.SetItemText(2,2,"21"); m_list.InsertItem(3,"kary");
m_list.SetItemText(3,1,"girl");
m_list.SetItemText(3,2,"19");
}
m_list.SetItemText(0,1,"boy");
m_list.SetItemText(0,2,"18");
m_list.SetItemData(0, 0);m_list.InsertItem(1,"candy");
m_list.SetItemText(1,1,"girl");
m_list.SetItemText(1,2,"17");
m_list.SetItemData(1, 1);m_list.InsertItem(2,"jack");
m_list.SetItemText(2,1,"boy");
m_list.SetItemText(2,2,"21");
m_list.SetItemData(2, 2);m_list.InsertItem(3,"kary");
m_list.SetItemText(3,1,"girl");
m_list.SetItemText(3,2,"19");
m_list.SetItemData(3, 3);
int InsertItem(const LVITEM* pItem);
用下面这个是没法指定的:
int InsertItem(int nItem, LPCTSTR lpszItem);
也可以参考LS的做法。
这行错了,改成:
m_list.SortItems(compareFunction,(DWORD_PTR)&m_list);