MFC的路上荊棘還真不少,單擊清單頭排序就是!!!由于網上的資源都太老了而且食用說明也沒有,對于初級食客來說很不友好,為此本大廚決定寫一篇食用說明,本說明無毒無害不可食用
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyVGd0lGdvwFdsVXYmVGZvwFdv1WZfJ3b0lGZlhGevwlcvRXakVGa49CX0Vmbu4GZzNmLn9Gbi1yYpRXY0N3Lc9CX6MHc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLyVGd0lGdvwFdsVXYmVGZvwFdv1WZfJ3b0lGZlhGevwlcvRXakVGa49CX0Vmbu4GZzNmLn9Gbi1yYpRXY0N3Lc9CX6MHc0RHaiojIsJye.gif)
環境: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清單
這是升序,再次單擊(左擊)
實作逆序
上面的食用方法希望可以幫到你.