Creación de controladores de columnas

[Esta característica solo se admite en Windows XP o versiones anteriores. ]

La vista Detalles del Explorador de Windows normalmente muestra varias columnas estándar. Cada columna muestra información, como el tamaño o el tipo de archivo, para cada archivo de la carpeta actual. Al implementar y registrar un controlador de columnas, puede hacer que las columnas personalizadas estén disponibles para su visualización.

Los procedimientos generales para implementar y registrar un controlador de extensión de Shell se describen en Creación de controladores de extensión de Shell. Este documento se centra en los aspectos de la implementación específicos de los controladores de columnas.

Se tratan los temas siguientes.

Funcionamiento de los controladores de columnas

En la ilustración siguiente se muestra el Explorador de Windows en la vista Detalles.

captura de pantalla del explorador de Windows en la vista de detalles

Con Windows 2000, la carpeta también puede admitir una serie de columnas que, de forma predeterminada, no se muestran. El usuario puede mostrar columnas adicionales haciendo clic con el botón derecho en uno de los encabezados de columna y seleccionando el comando Más... en el menú. A continuación, aparece un cuadro de diálogo que muestra las columnas disponibles para la carpeta y permite al usuario seleccionar qué columnas se van a mostrar. En la ilustración siguiente se muestra este cuadro de diálogo para el ejemplo anterior.

captura de pantalla del explorador de Windows con el cuadro de diálogo Elegir detalles que se muestra

Al crear un controlador de columnas, puede crear columnas personalizadas y agregarlas a esa lista. Por ejemplo, una colección de archivos que contienen música podría usar un controlador de columnas para mostrar las columnas que enumeran el artista y la pieza contenidas en cada archivo.

Un controlador de columnas es un objeto global al que se llama cada vez que el Explorador de Windows muestra la vista Detalles. Sin embargo, los controladores de columna se suelen usar para mostrar columnas personalizadas solo para los miembros de un tipo de archivo determinado. Antes de mostrar la vista Detalles, el Explorador de Windows consulta todos los controladores de columna registrados para sus características de columna. Si el usuario ha seleccionado una de las columnas del controlador, el Explorador de Windows consulta el controlador para los datos asociados. Cuando un controlador de columna recibe una solicitud de datos, lo proporciona si el archivo es miembro de su tipo admitido. De lo contrario, omite la solicitud devolviendo S_FALSE.

Registro de controladores de columna

Los controladores de columna se registran en la siguiente subclave.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers

Cree una subclave de ColumnHandlers denominada con la forma de cadena del GUID del identificador de clase (CLSID) del controlador. Para obtener una explicación general sobre cómo registrar controladores de extensión de Shell, consulte Creación de controladores de extensión de Shell. En el ejemplo siguiente se muestra cómo registrar un controlador de columnas.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers
            {My Column Handler CLSID GUID}

Implementación de controladores de columna

Al igual que todos los controladores de extensión de Shell, los controladores de columna son objetos del modelo de objetos componentes (COM) en proceso implementados como archivos DLL. Exportan la interfaz IColumnProvider además de IUnknown.

El Explorador de Windows llama a los tres métodos exportados por IColumnProvider para solicitar la información que necesita para mostrar la columna. El procedimiento usado por el Explorador de Windows es:

  1. Llame a IColumnProvider::Initialize para especificar la carpeta que está a punto de mostrarse.
  2. Llame a IColumnProvider::GetColumnInfo para recuperar el identificador y las características de la columna.
  3. Si el usuario ha seleccionado la columna, llame a IColumnProvider::GetItemData para cada archivo de la carpeta para recuperar los datos que pertenecen a la entrada de columna del archivo.

El método Initialize

El Explorador de Windows llama a IColumnProvider::Initialize para inicializar el controlador de columnas. El método tiene tres parámetros, pero actualmente solo se usa wszFolder . Se establece en la carpeta cuya vista Detalles está a punto de mostrarse. Almacene el nombre de la carpeta para usarlo más adelante e inicialice el objeto de controlador según sea necesario.

El método GetColumnInfo

El Explorador de Windows llama a IColumnProvider::GetColumnInfo para solicitar el identificador y las características de la columna. Pasa un índice para la columna en el parámetro dwIndex . Este índice es un valor arbitrario que se usa para enumerar columnas. El Explorador de Windows también pasa un puntero a una estructura SHCOLUMNINFO . Esta estructura se usa para devolver el identificador y las características de la columna. IColumnProvider::GetColumnInfo debe asignar los valores adecuados a los miembros de la estructura y devolver.

Las columnas se identifican mediante su identificador de conjunto de propiedades OLE (FMTID) y un identificador de propiedad asociado (PID). El primer miembro de la estructura SHCOLUMNINFO , scid, es un puntero a una estructura SHCOLUMNID que se usa para identificar la columna. Su miembro fmtid contiene el FMTID de la columna y su miembro pid contiene el PID de la columna. Por ejemplo, un par FMTID/PID estándar que se usa normalmente para identificar columnas es el PID autor del conjunto de propiedades Información de resumen.

Si es posible, el controlador debe usar LOS FMTID y LOS PID existentes para identificar la columna que admite. Si usa una estructura SHCOLUMNID personalizada, la columna mostrará datos solo para los archivos admitidos por el controlador. Si la carpeta contiene otros archivos, sus entradas estarán en blanco. Si una carpeta contiene archivos de más de un tipo de archivo, el uso de valores FMTID/PID estándar podría hacer posible combinar datos de diferentes tipos en la misma columna.

Establezca el miembro vt en el tipo VARIANT de los datos que desea mostrar en la columna. El tipo más usado es VT_LPSTR, ya que la mayoría de las columnas muestran sus datos como cadenas de caracteres. Los miembros restantes de la estructura SHCOLUMNINFO se usan para definir las características de la columna. Asigne valores según corresponda.

El método GetItemData

Si se ha seleccionado la columna del controlador de columnas, el Explorador de Windows llama a IColumnProvider::GetItemData para cada archivo de la carpeta que se va a mostrar. El parámetro pscid es un puntero a una estructura SHCOLUMNID que identifica la columna. El parámetro pscd apunta a una estructura SHCOLUMNDATA que identifica el archivo determinado.

El parámetro pvarData devuelve los datos que se deben mostrar en la columna del controlador para el archivo especificado por pscd. Si el controlador de columnas admite ese archivo, asigne su valor de datos a pvarData y devuelva S_OK. Si el controlador de columnas no admite el archivo, devuelva S_FALSE sin asignar un valor a pvarData.

Muchas carpetas contendrán una serie de archivos que no son compatibles con ningún controlador de columna determinado. Para mejorar la eficiencia, IColumnProvider::GetItemData debe comprobar primero el miembro pwszExt de la estructura a la que apunta pscd. Este miembro contiene la extensión de nombre de archivo. Si la extensión indica que el archivo no es miembro de un tipo de archivo admitido por el controlador, evite el procesamiento innecesario devolviendo inmediatamente S_FALSE.