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

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

}

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


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


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


实现逆序


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






猜你喜欢

转载自blog.csdn.net/qq_37059136/article/details/80519161