CListCtrl::SortItemsEx
您也可以使用應用程式定義的比較函式,目前排序清單檢視控制項中的項目。
BOOL SortItemsEx(
PFNLVCOMPARE pfnCompare,
DWORD_PTR dwData
);
參數
參數 |
描述 |
---|---|
[in] pfnCompare |
應用程式定義的比較函式的位址。 每次需要判斷,排序作業呼叫比較函式兩個清單項目的相對順序。 比較函式必須是類別的靜態成員或不屬於任何類別成員的個別函式。 |
[in] dwData |
應用程式定義的值將傳遞給比較函式。 |
傳回值
true ,如果此方法成功,否則, false。
備註
這個方法會將每個項目的索引來反映新的序列。
比較函式, pfnCompare,格式如下:
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
這是一個類似,不同之處在於 LVM_SORTITEMS資訊類型將傳遞給比較函式。 在 LVM_SORTITEMS, lParam1 和 lParam2 比較項目的值。 在 LVM_SORTITEMSEX, lParam1 是要比較的第一個項目的目前索引,而 lParam2 是第二個項目目前的索引。 您可以將 LVM_GETITEMTEXT 資訊擷取關於項目的詳細資訊。
比較函式必須傳回負值,如果第一個項目應該在第二個之前,正數值,如果第一個項目應該遵循第二,或零,而且兩個項目相等。
注意事項 |
---|
在已排序的過程中,清單檢視內容不穩定。除了之外,如果 LVM_GETITEM回呼函式 (Callback Function) 傳送至任何資訊清單檢視控制項,則結果無法預期。 |
這個方法會將 LVM_SORTITEMSEX 資訊,在 Windows SDK說明。
需求
標題: afxcmn.h
這個方法,在 Windows 2000 和 Windows NT 4.0 支援 Internet Explorer 5, Windows 98 (含) 以後版本。
範例
下列程式碼範例會定義名為的變數, m_listCtrl,用於存取目前清單檢視控制項。 這個變數用於下一個範例。
public:
// Variable used to access the list control.
CListCtrl m_listCtrl;
下列程式碼範例將示範 SortItemEx 方法。 在這個程式碼的前面的章節中,我們會建立顯示兩個資料行標題為「ClientID」和「訂單」將報告檢視中的清單檢視控制項。 您可以使用在「訂單」資料行的值,下列程式碼範例對資料表進行排序。
// The ListCompareFunc() method is a global function used by SortItemEx().
int CALLBACK ListCompareFunc(
LPARAM lParam1,
LPARAM lParam2,
LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(static_cast<int>(lParam1), 1);
CString strItem2 = pListCtrl->GetItemText(static_cast<int>(lParam2), 1);
int x1 = _tstoi(strItem1.GetBuffer());
int x2 = _tstoi(strItem2.GetBuffer());
int result = 0;
if ((x1 - x2) < 0)
result = -1;
else if ((x1 - x2) == 0)
result = 0;
else
result = 1;
return result;
}
void CCListCtrl_s2Dlg::OnBnClickedButton1()
{
// SortItemsEx
m_listCtrl.SortItemsEx( ListCompareFunc, (LPARAM)&m_listCtrl );
}