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

Cette rubrique est organisée comme suit :

Bonnes pratiques

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

Meilleures pratiques pour les implémentations de verbes

La liste suivante représente les meilleures pratiques pour les implémentations de verbes :

  • Choisissez toujours la méthode de verbe la plus simple qui répond à vos besoins.
  • Utilisez une méthode de verbe statique, si possible.
  • N’effectuez pas d’opérations nécessitant beaucoup de 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.
  • Préfixez les verbes 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 d’utiliser des noms uniques de fournisseur.
  • Positionnez l’interface utilisateur par rapport à la méthode d’appel, mais ne s’exécutez pas sur un thread 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 de l’implémentation de verbe réelle 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 d’utiliser rundll32.exe comme hôte pour votre verbe.
  • Lorsque vous implémentez IContextMenu::QueryContextMenu , veillez à renvoyer le nombre de verbes qui ont été 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, faites preuve de prudence 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\Folder
    • 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 passé à 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 d’un scénario de verbe à sélection multiple peut être important, il est important que vous preniez en compte les implications en matière de performances de vos implémentations de verbes. Par exemple, lorsqu’un utilisateur recherche « * » sur une étendue qui comprend un grand nombre d’éléments, puis clique sur Sélectionner tout et clique avec le bouton droit, le verbe s’affiche avec une sélection qui peut contenir des milliers d’éléments. Par conséquent, les verbes doivent uniquement prendre en compte le premier élément de la sélection et le nombre global d’éléments. Le premier élément est défini comme l’élément en haut de la vue ou l’élément sur lequel l’utilisateur a cliqué avec le 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 réin initialisé avec la sélection complète lorsque ce verbe est appelé.

Dans certains cas, il convient de prendre en compte un petit nombre d’éléments fixes. Par exemple, il convient qu’un verbe « diff » ne considère que 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 d’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 la 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 ne sont ajoutés que dans les cas où le nombre d’éléments est faible.

Les verbes de style joueur doivent être optimistes et ignorer silencieusement les éléments qui ne sont pas gérés. Si un échec d’action sur des é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.

Choix d’un verbe statique ou 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