mfc关于列表控件的排序问题
staticintCALLBACKMyCompareProc(LPARAMlParam1,LPARAMlParam2,LPARAMlParamSort){//从参数中提取...
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// 从参数中提取所需比较lc的两行数据
CListCtrl* lc = (CListCtrl*)lParamSort;
CString lp1 = lc->GetItemText(lParam1,sort_column);
CString lp2 = lc->GetItemText(lParam2,sort_column);
if (method)
return atoi(lp1)-atoi(lp2);
else
return atoi(lp1)-atoi(lp1);
}
void CCANDlg::OnColumnclickList3(NMHDR* pNMHDR, LRESULT* pResult)
{
// AfxMessageBox("xx");
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
sort_column = pNMListView->iSubItem;//点击的列
m_mylist.SortItems(MyCompareProc,(LPARAM)&m_mylist);
}
这段排序代码有什么问题? 为什么点击了函数运行了但是没反应。。 展开
{
// 从参数中提取所需比较lc的两行数据
CListCtrl* lc = (CListCtrl*)lParamSort;
CString lp1 = lc->GetItemText(lParam1,sort_column);
CString lp2 = lc->GetItemText(lParam2,sort_column);
if (method)
return atoi(lp1)-atoi(lp2);
else
return atoi(lp1)-atoi(lp1);
}
void CCANDlg::OnColumnclickList3(NMHDR* pNMHDR, LRESULT* pResult)
{
// AfxMessageBox("xx");
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
sort_column = pNMListView->iSubItem;//点击的列
m_mylist.SortItems(MyCompareProc,(LPARAM)&m_mylist);
}
这段排序代码有什么问题? 为什么点击了函数运行了但是没反应。。 展开
2个回答
展开全部
点击表头对数据进行排序是很常见的功能,这里给出MFC的简单实现。
//函数功能:响应点击列表框上的表头动作,对列表中的数据进行排序
void CStudManageDlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
m_SortColumn = pNMListView->iSubItem;
m_bAsc=!m_bAsc;//升序还是降序
int count = m_list01.GetItemCount(); //行数
for(int i=0; i<count; i++)
{
m_list01.SetItemData(i,i);
}
m_list01.SortItems(MyCompareProc, (LPARAM) &m_list01);
*pResult = 0;
}
int CALLBACK CStudManageDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1,m_SortColumn);
CString strItem2 = pListCtrl->GetItemText(lParam2,m_SortColumn);
if (m_bAsc)
{
return strcmp(strItem2, strItem1);
}
else
{
return strcmp(strItem1, strItem2);
}
}
这里有一点需要注意的地方,m_bAsc和m_SortColumn必须声明为static变量,在类外初始化。MyCompareProc也要声明为static CALLBACK函数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询