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