C++ 簡單實現MFC ListControl 點擊列頭排序_C 語言

來源:互聯網
上載者:User

說明:

SetItemData可以為每一行綁定一個DWORD類型的變數。用GetItemData可以獲得這個變數。
舉個例子,假設CListCtrl中你需要顯示某個資料表中的記錄,該表有個流水號主鍵ID,一般這個ID值本身沒有什麼意義,使用者也不需要看,因此在CListCtrl的可見列中,你不需要顯示。但往往做具體查詢等操作時,你又需要用這個ID來完成。這時,用SetItemData將其綁定到每一行,將非常方便,使用者操作哪一行,則用GetItemData可以得到對應記錄的ID,直接用來做操作,很爽。
由於綁定的是DWORD類型,因此還有一個擴充作用是綁定一個指標對象。比如這裡我不再是一個ID主鍵了,而是需要關聯一個資料結構,那麼就可以把該資料結構對象的指標進行SetItemData綁定。這麼做,可以省去再到一堆的資料結構數組中去尋找的過程。

第一步:

定義全域變數:

int sort_column; // 記錄點擊的列bool method; // 記錄比較方法

第二步:

添加比較函數

// 比較函數2staticint CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort){// 從參數中提取所需比較lc的兩行資料int row1 = (int) lParam1;int row2 = (int) lParam2; CListCtrl* lc = (CListCtrl*)lParamSort;CString lp1 = lc->GetItemText(row1,sort_column);CString lp2 = lc->GetItemText(row2,sort_column); // 比較,對不同的列,不同比較,注意記錄前一次排序方向,下一次要相反排序 if (sort_column<2){// int型比較 if (method) return atoi(lp1)-atoi(lp2); else return atoi(lp1)-atoi(lp1);}else{// 文字型比較 if (method)return lp1.CompareNoCase(lp2); else return lp2.CompareNoCase(lp1); } return0; }

第三步:添加列頭點擊事件  Lvn_Columnclick

void ClistDlg::OnLvnColumnclickxxx(NMHDR *pNMHDR, LRESULT *pResult){LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);// TODO: 在此添加控制項通知處理常式代碼sort_column = pNMLV->iSubItem;//點擊的列int count = m_list_port.GetItemCount();for (int i=0;i<count;i++)  m_list_port.SetItemData(i,i); // 每行的比較關鍵字,此處為列序號(點擊的列號),可以設定為其他 比較函數的第一二個參數m_list_port.SortItems(MyCompareProc,(DWORD_PTR)&m_list_port);//排序 第二個參數是比較函數的第三個參數*pResult =0;}

完成。

method是用來控制順序逆序的,看個人情況設定。

以上所述就是本文的全部內容了,希望大家能夠喜歡。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.