CListCtrl::SortItemsEx
Ordina gli elementi del controllo visualizzazione elenco corrente utilizzando una funzione di confronto definita dall'applicazione.
BOOL SortItemsEx(
PFNLVCOMPARE pfnCompare,
DWORD_PTR dwData
);
Parametri
Parametro |
Descrizione |
---|---|
[in] pfnCompare |
L'indirizzo della funzione di confronto definita dall'applicazione. L'operazione di ordinamento chiama la funzione di confronto quando l'ordine relativo di due elementi elenco è necessario determinare da. La funzione di confronto deve essere un membro statico di una classe o una funzione autonoma che non è un membro di una classe. |
[in] dwData |
Valore definito da passato alla funzione di confronto. |
Valore restituito
true se questo metodo ha esito positivo; in caso contrario, false.
Note
Questo metodo modifica l'indice di ogni elemento per riflettere la nuova sequenza.
La funzione di confronto, pfnCompare, ha il formato seguente:
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
Questo messaggio è simile LVM_SORTITEMS, ad eccezione del tipo di dati passato alla funzione di confronto. In LVM_SORTITEMS, lParam1 e lParam2 sono i valori degli elementi da confrontare. In LVM_SORTITEMSEX, lParam1 è l'indice corrente del primo elemento da confrontare e lParam2 è l'indice corrente del secondo elemento. È possibile inviare un messaggio LVM_GETITEMTEXT per recuperare ulteriori informazioni su un elemento.
La funzione di confronto deve restituire un valore negativo se il primo elemento precede il secondo, un valore positivo se il primo elemento segue il secondo, o zero se i due elementi sono uguali.
Nota
Durante il processo di ordinamento, il contenuto della visualizzazione elenco sono instabili.Se la funzione di callback invia i messaggi al controllo elenco diverso da LVM_GETITEM, i risultati sono imprevedibili.
Questo metodo invia il messaggio LVM_SORTITEMSEX, come descritto in Windows SDK.
Requisiti
intestazione: afxcmn.h
Questo metodo è supportato in Windows 2000, Windows NT 4.0 con Internet Explorer 5, Windows 98 e versioni successive.
Esempio
Nell'esempio di codice definisce una variabile, m_listCtrl, utilizzata per accedere al controllo elenco corrente. Questa variabile viene utilizzata nell'esempio seguente.
public:
// Variable used to access the list control.
CListCtrl m_listCtrl;
Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo del metodo SortItemEx. In una sezione precedente di questo esempio di codice, creato un controllo elenco che visualizza due colonne denominato "ClientID" e "conversione" in una visualizzazione report. Nell'esempio di codice ordina la tabella mediante i valori nella colonna "conversione".
// 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 );
}