Método IShellFolder::CompareIDs (shobjidl_core.h)
Determina el orden relativo de dos objetos de archivo o carpetas, dadas sus listas de identificadores de elementos.
Sintaxis
HRESULT CompareIDs(
[in] LPARAM lParam,
[in] PCUIDLIST_RELATIVE pidl1,
[in] PCUIDLIST_RELATIVE pidl2
);
Parámetros
[in] lParam
Tipo: LPARAM
Valor que especifica cómo se debe realizar la comparación.
Los dieciséis bits inferiores de lParam definen la regla de ordenación. La mayoría de las aplicaciones establecen la regla de ordenación en el valor predeterminado de cero, lo que indica que los dos elementos deben compararse por nombre. El sistema no define ninguna otra regla de ordenación. Algunos objetos de carpeta pueden permitir que las aplicaciones que llaman usen los dieciséis bits inferiores de lParam para especificar reglas de ordenación específicas de carpetas. Las reglas y sus valores lParam asociados se definen mediante la carpeta .
Cuando el objeto de vista de carpetas del sistema llama a IShellFolder::CompareIDs, se usan los dieciséis bits inferiores de lParam para especificar la columna que se usará para la comparación.
Los dieciséis bits superiores de lParam se usan para marcas que modifican la regla de ordenación. Actualmente, el sistema define estas marcas modificadores.
SHCIDS_ALLFIELDS
Versión 5.0. Compare toda la información contenida en la estructura ITEMIDLIST , no solo los nombres para mostrar. Esta marca solo es válida para los objetos de carpeta que admiten la interfaz IShellFolder2 . Por ejemplo, si los dos elementos son archivos, la carpeta debe comparar sus nombres, tamaños, tiempos de archivo, atributos y cualquier otra información de las estructuras. Si se establece esta marca, los dieciséis bits inferiores de lParam deben ser cero.
SHCIDS_CANONICALONLY
Versión 5.0. Al comparar por nombre, compare los nombres del sistema, pero no los nombres para mostrar. Cuando se pasa esta marca, los dos elementos se comparan con los criterios que determina la carpeta shell son más eficaces, siempre y cuando implemente una función de ordenación coherente. Esta marca es útil al comparar la igualdad o cuando los resultados de la ordenación no se muestran al usuario. Esta marca no se puede combinar con otras marcas.
[in] pidl1
Tipo: PCUIDLIST_RELATIVE
Puntero a la estructura ITEMIDLIST del primer elemento. Será relativa a la carpeta . Esta estructura ITEMIDLIST puede contener más de un elemento; por lo tanto, se debe comparar toda la estructura, no solo el primer elemento.
[in] pidl2
Tipo: PCUIDLIST_RELATIVE
Puntero a la estructura ITEMIDLIST del segundo elemento. Será relativa a la carpeta . Esta estructura ITEMIDLIST puede contener más de un elemento; por lo tanto, se debe comparar toda la estructura, no solo el primer elemento.
Valor devuelto
Tipo: HRESULT
Si este método se ejecuta correctamente, el campo CODE del HRESULT contiene uno de los valores siguientes. Para obtener información sobre la extracción del campo CODE del HRESULT devuelto, vea Comentarios. Si este método no se realiza correctamente, devuelve un código de error COM.
Código devuelto | Descripción |
---|---|
|
Un valor devuelto negativo indica que el primer elemento debe preceder al segundo (pidl1 < pidl2). |
|
Un valor devuelto positivo indica que el primer elemento debe seguir el segundo (pidl1 > pidl2). |
|
Un valor devuelto de cero indica que los dos elementos son iguales (pidl1 = pidl2). |
Comentarios
Nota para llamar a aplicaciones
No establezca la marca SHCIDS_ALLFIELDS en lParam si el objeto folder no admite IShellFolder2. Si lo hace, podría tener resultados imprevisibles. Si usa la marca SHCIDS_ALLFIELDS , los dieciséis bits inferiores de lParam deben establecerse en cero.Use la macro HRESULT_CODE para extraer el campo CODE del HRESULT y, a continuación, convierta el resultado como un short.
HRESULT hres = psf->CompareIDs(lParam, pidl1, pidl2);
if ((short)HRESULT_CODE(hres) < 0)
{ /* pidl1 comes first */ }
else if ((short)HRESULT_CODE(hres) > 0)
{ /* pidl2 comes first */ }
else
{ /* the two pidls are equal */ }
Nota para los implementadores
Para extraer la regla de ordenación, use un operador AND bit a bit (&) para combinar lParam con SHCIDS_COLUMNMASK (0X0000FFFF). Esta operación enmascara los dieciséis bits superiores de lParam, incluido el valor de SHCIDS_ALLFIELDS .La macro MAKE_HRESULT es útil para construir el valor devuelto para una implementación del método CompareIDs. Por ejemplo:
HRESULT CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
{
short sResult;
unsigned uSeverity = 0x000000000;
// Code that determines the relative order of pidl1 and pidl2 according to
// any sorting rules specified by lParam goes here.
//
// Set sResult = -1 if pidl1 precedes pidl2 (pidl1 < pidl2).
// Set sResult = 1 if pidl1 follows pidl2. (pidl1 > pidl2).
// Set sResult = 0 if pidl1 and pidl2 are equivalent in terms of ordering. (pidl1 = pidl2).
//
// Leave uSeverity = 0 if the order is successfully determined.
// Set uSeverity = 0x00000001 if there is an error.
return MAKE_HRESULT(uSeverity, 0, (unsigned short)sResult);
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | shobjidl_core.h (include Shobjidl.h) |
Archivo DLL | Shell32.dll (versión 4.0 o posterior) |