MFC list control控件单击列表头排序

你离开我真会死。 提交于 2019-12-10 08:29:34

首先,你要有一个list Control控件

一:然后定义全局变量:

DWORD dwSelCol  =  0; // 记录点击的列

BOOL bASC =  FALSE; // 记录比较方法  默认为声升序

二:添加比较函数:

比较函数是一个回调函数,里面是排序方法的实现。

首先在你的头文件中声明:

static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAMlParamSort)

然后在cpp文件中实现:

int CALLBACK CListTestDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
    
	LVFINDINFO findInfo;
	findInfo.flags = LVFI_PARAM;
	findInfo.lParam = lParam1;
	int iItem1 = pListCtrl->FindItem(&findInfo,-1);
	findInfo.lParam = lParam2;
	int iItem2 = pListCtrl->FindItem(&findInfo,-1);

    CString   strItem1 = pListCtrl->GetItemText(iItem1 ,dwSelCol);
    CString   strItem2 = pListCtrl->GetItemText(iItem2 ,dwSelCol);    
    if (bAsc)
    {    
        return strcmp(strItem2, strItem1);    
    }
    else    
    {
        return strcmp(strItem1, strItem2);    
    }
}

这里值得注意的是声明是static函数,但是在实现时记得不要带static,还有记得带上你类的作用域(CListTestDlg是我的Dlg类)

三:表头点击相应函数:

//函数功能:响应点击列表框上的表头动作,对列表中的数据进行排序

void CListTestDlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult) 

{

    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

    // TODO: Add your control notification handler code here
    
    if(dwSelCol != pNMListView->iSubItem){
        dwSelCol = pNMListView->iSubItem;
        bASC = bASC;
    }
    else{
        bASC = !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;

}

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!