欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

list control单击列表头排序(MFC)

程序员文章站 2024-03-14 22:00:11
...

    MFC的路上荆棘还真不少,单击列表头排序就是!!!由于网上的资源都太老了而且食用说明也没有,对于初级食客来说很不友好,为此本大厨决定写一篇食用说明,本说明无毒无害不可食用list control单击列表头排序(MFC)list control单击列表头排序(MFC)

环境:VS2005

首先要创建list control控件,如果你连list control都不会创建,那就太吓人了

然后,在.cpp文件里面先定义两个全局变量

DWORD  dwSelColID =0; //选择的列
BOOL   bASC = FALSE;     //是否升序

然后创建list control的单击事件:OnLvnColumnclick****

void CMy528Update_MfcDlg::OnLvnColumnclickList3(NMHDR *pNMHDR, LRESULT *pResult)//***********************单击表头实现排序
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	

	if (dwSelColID != pNMLV->iSubItem)
	{
		dwSelColID = pNMLV->iSubItem;
		bASC = bASC;
	}
	else
		bASC = !bASC;
	int count = m_list3.GetItemCount();
	for (int i = 0;i < count;i++)
		m_list3.SetItemData(i,i);
	m_list3.SortItems(CompareFunc,(LPARAM)(&m_list3));
	*pResult = 0;
}
这段代码里m_list3是我list control的名字,自己看情况修改 
CompareFunc

是回调函数,里面放的是排序方法(其实应该把回调函数放上边的)

static int CALLBACK CompareFunc(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, dwSelColID);   //需要研究
	CString strItem2 = pListCtrl->GetItemText(iItem2, dwSelColID);   //需要研究
	char * str1 =(char * )strItem1.GetBuffer(strItem1.GetLength());  //需要研究
	char * str2 =(char * )strItem2.GetBuffer(strItem1.GetLength());  //需要研究
	

	if (bASC)
		return strcmp(str1,str2);
	else
		return strcmp(str2,str1);

}

到这里就结束了,下面我演示下

list control单击列表头排序(MFC)

这是我做的界面,一开始记录是没有排序的,我单击id列表

list control单击列表头排序(MFC)

这是升序,再次单击(左击)

list control单击列表头排序(MFC)

实现逆序


上面的食用方法希望可以帮到你.






相关标签: list control排序