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列表
这是升序,再次单击(左击)
实现逆序
上面的食用方法希望可以帮到你.