CListCtrl::SortItemsEx
Ordena los elementos del control actual de la vista de lista mediante una función definido por la aplicación de la comparación.
BOOL SortItemsEx(
PFNLVCOMPARE pfnCompare,
DWORD_PTR dwData
);
Parámetros
Parámetro |
Descripción |
---|---|
[in] pfnCompare |
dirección de la función definido por la aplicación de la comparación. La operación de ordenación llama a la función de comparación cada vez que el orden relativo de dos elementos de lista debe ser determinado. La función de comparación debe ser un miembro estático de una clase o función independiente que no es miembro de ninguna clase. |
[in] dwData |
Valor definido por la aplicación pasado a la función de comparación. |
Valor devuelto
true si este método es correcto; si no, false.
Comentarios
este método cambia el índice de cada elemento para reflejar la nueva secuencia.
La función de comparación, pfnCompare, tiene el formato siguiente:
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
Este mensaje es como LVM_SORTITEMS, a excepción del tipo de información que se pasa a la función de comparación. En LVM_SORTITEMS, lParam1 y lParam2 son los valores de los elementos que se van a comparar. En LVM_SORTITEMSEX, lParam1 es el índice actual del primer elemento a comparar y lParam2 es el índice actual del segundo elemento. Puede enviar un mensaje de LVM_GETITEMTEXT para recuperar más información sobre un elemento.
La función de comparación debe devolver un valor negativo si el primer elemento precede al segundo, un valor positivo si el primer elemento sigue el segundo, o pone a cero si los dos elementos son iguales.
Nota
Durante el proceso de ordenación, el contenido de la vista de lista son inestables.Si la función de devolución de llamada envía los mensajes al control listview con excepción de LVM_GETITEM, los resultados son imprevisibles.
este método envía el mensaje de LVM_SORTITEMSEX , que se describe en Windows SDK.
Requisitos
encabezado: afxcmn.h
Este método se admite en Windows, Windows NT 4.0 con Internet Explorer 5, Ejecutar, y posteriormente.
Ejemplo
El ejemplo de código siguiente define una variable, m_listCtrl, que se utiliza para tener acceso al control actual de la vista de lista. esta variable se utiliza en el ejemplo siguiente.
public:
// Variable used to access the list control.
CListCtrl m_listCtrl;
En el ejemplo de código siguiente se muestra el método SortItemEx. En una sección anterior de este ejemplo de código, creamos un control listview que muestra dos columnas titularon “ClientID” y “grado” en una vista de informe. El ejemplo de código siguiente ordena la tabla mediante los valores de la columna “grado”.
// 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 );
}