Partager via


Meilleures pratiques pour les gestionnaires de menus contextuels et les verbes multiples

Cette rubrique est organisée comme suit :

Meilleures pratiques

Les verbes statiques sont des verbes les plus simples à implémenter et fournissent des fonctionnalités enrichies. Nous vous encourageons vivement à implémenter un verbe à l’aide de l’une des méthodes de verbe statique.

Meilleures pratiques pour les implémentations de verbes

La liste suivante représente les meilleures pratiques pour les implémentations détaillées :

  • Choisissez toujours la méthode verbe la plus simple qui répond à vos besoins.
  • Utilisez une méthode de verbe statique, si possible.
  • N’effectuez pas d’opérations gourmandes en ressources ou d’E/S sur le thread d’interface utilisateur. IShellExtInit ::Initialize et IContextMenu ::QueryContextMenu doivent être très conservateurs dans le travail qu’ils effectuent. IContextMenu ::InvokeCommand doit être effectué dans un autre processus, ou vous devez créer un thread pour éviter de bloquer l’appelant.
  • Verbes de préfixe avec le nom du fournisseur de logiciels indépendant (ISV), comme suit. ISVName.verb L’utilisation de noms non qualifiés peut entraîner des collisions avec plusieurs éditeurs de logiciels indépendants qui ont choisi le même nom de verbe.
  • Utilisez toujours un ProgID spécifique à l’application. Étant donné que certains types d’éléments n’utilisent pas ce mappage, il est nécessaire de trouver des noms uniques au fournisseur.
  • Positionnez l’interface utilisateur par rapport à la méthode d’appel, mais ne s’exécutez pas sur un thread d’appelant.
  • N’acceptez pas la valeur de retour S_OK pour les verbes canoniques passés à la méthode IContextMenu ::InvokeCommand . Cela entraîne l’appel d’un échec pour l’implémentation réelle du verbe et retourne un code d’échec pour les verbes canoniques. Si vous ne prenez pas en charge les verbes canoniques, retournez un échec lorsqu’une valeur HIWORD(lpVerb) différente de zéro est rencontrée.
  • Évitez l’utilisation de rundll32.exe comme hôte pour votre verbe.
  • Lors de l’implémentation de IContextMenu ::QueryContextMenu , veillez à renvoyer le nombre de verbes ajoutés au menu via la valeur HRESULT à l’aide de la macro ResultFromShort.
  • Si vous vous inscrivez sur l’une des entrées de clé de Registre suivantes, soyez prudent et veillez à inscrire votre gestionnaire sur le type le plus spécifique pour réduire les conséquences potentiellement inattendues :
    • HKEY_CLASSES_ROOT\*
    • HKEY_CLASSES_ROOT\AllFileSystemObjects
    • HKEY_CLASSES_ROOT\Dossier
    • HKEY_CLASSES_ROOT\Directory
  • Définissez la touche MayChangeDefaultMenu uniquement si vous prévoyez que vous devrez peut-être modifier le verbe par défaut dans le menu contextuel. Si votre gestionnaire ne modifie pas le verbe par défaut, vous ne devez pas définir cette clé, car cela entraîne le chargement inutile de votre DLL par le système.
  • Réduisez le travail que vous effectuez dans IShellExtInit ::Initialize. Pour les gestionnaires de menus contextuels, capturez l’objet de données transmis à IShellExtInit ::Initialize, puis traitez-le dans IContextMenu ::QueryContextMenu ou IContextMenu ::InvokeCommand.

Meilleures pratiques pour les verbes de sélection multiple

Étant donné que le nombre d’éléments dans un scénario de verbe à sélection multiple peut être important, il est important que vous considériez les implications en termes de performances de vos implémentations de verbes. Par exemple, lorsqu’un utilisateur recherche « * » sur une étendue qui inclut un grand nombre d’éléments, puis clique sur Sélectionner tout et cliquer avec le bouton droit, le verbe est présenté avec une sélection qui peut contenir des milliers d’éléments. Par conséquent, les verbes ne doivent considérer que le premier élément de la sélection et le nombre d’éléments globaux. Le premier élément est défini comme l’élément en haut de la vue ou l’élément que l’utilisateur a cliqué avec le bouton droit.

Dans Windows 7 et versions ultérieures, le nombre d’éléments passés à un verbe est limité à 16 lorsqu’un menu contextuel est interrogé. Le verbe est ensuite recréé et re-initialisé avec la sélection complète lorsque ce verbe est appelé.

Il est approprié dans certains cas de prendre en compte un petit nombre d’éléments fixes. Par exemple, il est approprié pour un verbe « diff » de considérer uniquement les deux premiers éléments. En règle générale, vous n’avez pas besoin de tester chaque élément de la sélection pour voir s’il s’agit d’un certain type, ou interroger chaque élément de la sélection pour ses propriétés. Examinez plutôt le premier élément et décidez s’il est approprié d’ajouter votre verbe.

Sélections hétérogènes

Les verbes optimistes sont automatiquement ajoutés dans le cas de sélection multiple, en supposant que les éléments non spécifiés peuvent être gérés par le verbe. En revanche, les verbes pessimistes ne sont pas ajoutés lorsque la sélection contient des éléments non spécifiés et sont ajoutés uniquement dans les cas où le nombre d’éléments est petit.

Les verbes de style de lecteur doivent être optimistes et ignorer silencieusement les éléments qui ne sont pas gérés. Si un échec d’action sur les éléments peut entraîner une perte de données ou une confusion, le verbe doit avertir les utilisateurs des éléments qui ne peuvent pas être traités. Par exemple, un verbe « sauvegarde » doit indiquer que certains éléments n’ont pas pu être sauvegardés.

Choisir entre un verbe statique et dynamique pour votre menu contextuel

Création de gestionnaires de menu contextuel

Personnalisation d’un menu contextuel à l’aide de verbes dynamiques

Menus contextuels et gestionnaires de menus contextuels

Verbes et associations de fichiers

Informations de référence sur le menu contextuel