Création de gestionnaires de colonnes

[Cette fonctionnalité est prise en charge uniquement sous Windows XP ou version antérieure. ]

L’affichage Détails dans windows windows Explorer affiche normalement plusieurs colonnes standard. Chaque colonne répertorie des informations, telles que la taille ou le type de fichier, pour chaque fichier du dossier actif. En implémentant et en inscrivant un gestionnaire de colonnes, vous pouvez rendre des colonnes personnalisées disponibles pour l’affichage.

Les procédures générales d’implémentation et d’inscription d’un gestionnaire d’extensions Shell sont décrites dans Création de gestionnaires d’extensions Shell. Ce document se concentre sur les aspects de l’implémentation spécifiques aux gestionnaires de colonnes.

Les sujets suivants sont abordés.

Fonctionnement des gestionnaires de colonnes

L’illustration suivante montre Windows Explorer en mode Détails.

capture d’écran de l’Explorateur Windows en mode Détails

Avec Windows 2000, le dossier peut également prendre en charge un certain nombre de colonnes qui, par défaut, ne sont pas affichées. L’utilisateur peut afficher des colonnes supplémentaires en cliquant avec le bouton droit sur l’un des en-têtes de colonne et en sélectionnant la commande Plus... dans le menu. Une boîte de dialogue s’affiche alors qui répertorie les colonnes disponibles pour le dossier et permet à l’utilisateur de sélectionner les colonnes à afficher. L’illustration suivante montre cette boîte de dialogue pour l’exemple précédent.

capture d’écran de l’Explorateur Windows avec la boîte de dialogue Choisir les détails affichée

En créant un gestionnaire de colonnes, vous pouvez créer des colonnes personnalisées et les ajouter à cette liste. Par exemple, une collection de fichiers qui contiennent de la musique peut utiliser un gestionnaire de colonnes pour afficher les colonnes répertoriant l’artiste et la pièce contenues dans chaque fichier.

Un gestionnaire de colonnes est un objet global appelé chaque fois que Windows Explorer affiche la vue Détails. Toutefois, les gestionnaires de colonnes sont généralement utilisés pour afficher des colonnes personnalisées uniquement pour les membres d’un type de fichier particulier. Avant d’afficher la vue Détails, Windows Explorer interroge tous les gestionnaires de colonnes inscrits pour connaître leurs caractéristiques de colonne. Si l’utilisateur a sélectionné l’une des colonnes du gestionnaire, Windows Explorer interroge le gestionnaire à la recherche des données associées. Lorsqu’un gestionnaire de colonnes reçoit une demande de données, il la fournit si le fichier est membre de son type pris en charge. Sinon, elle ignore la demande en retournant S_FALSE.

Inscription des gestionnaires de colonnes

Les gestionnaires de colonnes sont inscrits sous la sous-clé suivante.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers

Créez une sous-clé de ColumnHandlers nommée avec la forme de chaîne du GUID d’identificateur de classe (CLSID) du gestionnaire. Pour une présentation générale de l’inscription des gestionnaires d’extensions Shell, consultez Création de gestionnaires d’extensions Shell. L’exemple suivant montre comment inscrire un gestionnaire de colonnes.

HKEY_CLASSES_ROOT
   Folder
      shellex
         ColumnHandlers
            {My Column Handler CLSID GUID}

Implémentation de gestionnaires de colonnes

Comme tous les gestionnaires d’extension Shell, les gestionnaires de colonnes sont des objets COM (Component Object Model) in-process implémentés en tant que DLL. Ils exportent l’interface IColumnProvider en plus de IUnknown.

Windows Explorer appelle les trois méthodes exportées par IColumnProvider pour demander les informations dont il a besoin pour afficher la colonne. La procédure utilisée par Windows Explorer est la suivante :

  1. Appelez IColumnProvider::Initialize pour spécifier le dossier sur le point d’être affiché.
  2. Appelez IColumnProvider::GetColumnInfo pour récupérer l’identificateur et les caractéristiques de la colonne.
  3. Si la colonne a été sélectionnée par l’utilisateur, appelez IColumnProvider::GetItemData pour chaque fichier du dossier afin de récupérer les données qui appartiennent à l’entrée de colonne du fichier.

La méthode Initialize

Windows Explorer appelle IColumnProvider::Initialize pour initialiser le gestionnaire de colonnes. La méthode a trois paramètres, mais seul wszFolder est actuellement utilisé. Il est défini sur le dossier dont la vue Détails est sur le point d’être affichée. Stockez le nom du dossier pour une utilisation ultérieure et initialisez l’objet gestionnaire si nécessaire.

Méthode GetColumnInfo

Windows Explorer appelle ensuite IColumnProvider::GetColumnInfo pour demander l’identificateur et les caractéristiques de la colonne. Il transmet un index pour la colonne dans le paramètre dwIndex . Cet index est une valeur arbitraire utilisée pour énumérer des colonnes. Windows Explorer passe également un pointeur vers une structure SHCOLUMNINFO. Cette structure est utilisée pour retourner l’identificateur et les caractéristiques de la colonne. IColumnProvider::GetColumnInfo doit affecter les valeurs appropriées aux membres de la structure et du retour.

Les colonnes sont identifiées par leur ID de jeu de propriétés OLE (FMTID) et un ID de propriété associé (PID). Le premier membre de la structure SHCOLUMNINFO , scid, est un pointeur vers une structure SHCOLUMNID utilisée pour identifier la colonne. Son membre fmtid contient le FMTID de la colonne, et son membre pid le PID de la colonne. Par exemple, une paire FMTID/PID standard couramment utilisée pour identifier les colonnes est le PID auteur du jeu de propriétés Informations de résumé.

Si possible, votre gestionnaire doit utiliser des FMTID et des PID existants pour identifier la colonne qu’il prend en charge. Si vous utilisez une structure SHCOLUMNID personnalisée, la colonne affiche les données uniquement pour les fichiers pris en charge par le gestionnaire. Si le dossier contient d’autres fichiers, leurs entrées sont vides. Si un dossier contient des fichiers de plusieurs types de fichiers, l’utilisation de valeurs FMTID/PID standard peut permettre de fusionner des données de différents types dans la même colonne.

Définissez le membre vt sur le type VARIANT des données que vous souhaitez afficher dans la colonne. Le type le plus couramment utilisé est VT_LPSTR, car la plupart des colonnes affichent leurs données sous forme de chaînes de caractères. Les membres restants de la structure SHCOLUMNINFO sont utilisés pour définir les caractéristiques de la colonne. Affectez des valeurs comme il convient.

GetItemData, méthode

Si la colonne du gestionnaire de colonnes a été sélectionnée, Windows Explorer appelle IColumnProvider::GetItemData pour chaque fichier du dossier à afficher. Le paramètre pscid est un pointeur vers une structure SHCOLUMNID qui identifie la colonne. Le paramètre pscd pointe vers une structure SHCOLUMNDATA qui identifie le fichier particulier.

Le paramètre pvarData retourne les données qui doivent être affichées dans la colonne du gestionnaire pour le fichier spécifié par pscd. Si ce fichier est pris en charge par votre gestionnaire de colonnes, affectez sa valeur de données à pvarData et retournez S_OK. Si le fichier n’est pas pris en charge par votre gestionnaire de colonnes, retournez S_FALSE sans affecter de valeur à pvarData.

De nombreux dossiers contiennent un certain nombre de fichiers qui ne sont pas pris en charge par un gestionnaire de colonnes particulier. Pour améliorer l’efficacité, IColumnProvider::GetItemData doit d’abord case activée le membre pwszExt de la structure pointée vers pscd. Ce membre contient l’extension de nom de fichier. Si l’extension indique que le fichier n’est pas membre d’un type de fichier pris en charge par votre gestionnaire, évitez tout traitement inutile en retournant immédiatement S_FALSE.