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);
}

这段排序代码有什么问题? 为什么点击了函数运行了但是没反应。。
展开
 我来答
ahcc08
推荐于2018-03-28 · 知道合伙人软件行家
ahcc08
知道合伙人软件行家
采纳数:11853 获赞数:51941
拥有丰富的软件开发经验。

向TA提问 私信TA
展开全部
点击表头对数据进行排序是很常见的功能,这里给出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函数。
冷书艺0JGfd9
2017-10-13
知道答主
回答量:2
采纳率:0%
帮助的人:1851
展开全部
上面答案可以用的。
static int m_bAsc, m_SortColumn;//写在类外面
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);//在头文件中声明
//若strcmp报错,将其改为_tcscmp
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式