Поделиться через


Рекомендации по обработчикам контекстного меню и нескольким командам

Этот раздел организован следующим образом:

Рекомендации

Статическое глагол — это простые команды для реализации и предоставление расширенных функциональных возможностей. Настоятельно рекомендуется реализовать команду с помощью одного из методов статической команды.

Рекомендации по реализации команд

В следующем списке представлены рекомендации по реализации команд.

  • Всегда выбирает самый простой метод команды, соответствующий вашим потребностям.
  • При возможности используйте статический метод глагола.
  • Не выполняйте ресурсоемкие операции или операции ввода-вывода в потоке пользовательского интерфейса. Оба объекта IShellExtInit::Initialize и IContextMenu::QueryContextMenu должны быть очень консервативными в выполняемой работе. IContextMenu::InvokeCommand необходимо выполнить в другом процессе или создать новый поток, чтобы избежать блокировки вызывающего объекта.
  • Префиксные команды с именем независимого поставщика программного обеспечения (ISV), как показано ниже ISVName.verb. Использование неквалифицированных имен может привести к столкновениям с несколькими независимыми поставщиками программного обеспечения, которые выбрали одно и то же имя команды.
  • Всегда используйте идентификатор ProgID для конкретного приложения. Так как некоторые типы элементов не используют это сопоставление, необходимо использовать уникальные имена поставщиков.
  • Поместите пользовательский интерфейс относительно вызывающего метода, но не выполняйтесь в потоке вызывающего объекта.
  • Не принимаю возвращаемое значение S_OK для канонических команд, переданных методу IContextMenu::InvokeCommand. Это приводит к сбою для вызова реальной реализации команды и возвращает код сбоя для канонических команд. Если канонические команды не поддерживаются, возвращается ошибка при обнаружении ненулевого значения HIWORD(lpVerb).
  • Избегайте использования rundll32.exe в качестве узла для команды.
  • При реализации IContextMenu::QueryContextMenu обязательно верните количество команд, которые были добавлены в меню через значение HRESULT с помощью макроса ResultFromShort.
  • Если вы регистрируетесь в одном из следующих записей раздела реестра, будьте осторожны и обязательно зарегистрируйте обработчик в наиболее конкретном типе, чтобы уменьшить возможные непредвиденные последствия:
    • HKEY_CLASSES_ROOT\*
    • HKEY_CLASSES_ROOT\AllFileSystemObjects
    • HKEY_CLASSES_ROOT\Folder
    • HKEY_CLASSES_ROOT\Directory
  • Задайте ключ MayChangeDefaultMenu, только если ожидается, что в контекстном меню может потребоваться изменить команду по умолчанию. Если обработчик не изменяет команду по умолчанию, этот ключ не следует задавать, так как это приводит к тому, что система загружает библиотеку DLL ненужным образом.
  • Сведите к минимуму работу, выполняемую в IShellExtInit::Initialize. Для обработчиков контекстного меню запишите объект данных, переданный в IShellExtInit::Initialize, а затем обработайте его в IContextMenu::QueryContextMenu или IContextMenu::InvokeCommand.

Рекомендации по нескольким командам выбора

Так как количество элементов в сценарии с несколькими выборами может быть большим, важно учитывать последствия производительности реализаций команд. Например, когда пользователь ищет "*" по области, включающей большое количество элементов, а затем нажимает кнопку "Выбрать все " и щелкает правой кнопкой мыши, команда отображается с выбранным элементом, который может содержать тысячи элементов. В результате команды должны рассматривать только первый элемент в выборе, а также общее число элементов. Первый элемент определяется как элемент в верхней части представления или элемент, который пользователь сначала щелкнул правой кнопкой мыши.

В Windows 7 и более поздних версиях количество элементов, передаваемых в команду, ограничено 16 при запросе контекстного меню. Затем команда создается повторно и повторно инициализируется с полным выделением при вызове этой команды.

В некоторых случаях следует рассмотреть небольшое количество фиксированных элементов. Например, для команды diff следует учитывать только первые два элемента. Как правило, вам не нужно тестировать каждый элемент в выборе, чтобы узнать, является ли он определенным типом или запрашивать каждый элемент в выборе для его свойств. Посмотрите на первый элемент и решите, нужно ли добавить команду.

Разнородные выборы

Оптимистические команды автоматически добавляются в случае с несколькими выборами, предполагая, что неиспецированные элементы могут обрабатываться командой. В отличие от этого, пессимистичные команды не добавляются, если выбор содержит непреднамеренные элементы и добавляется только в тех случаях, когда количество элементов невелико.

Команды стиля проигрывателя должны быть оптимистичными и молча пропускать элементы, которые не обрабатываются. Если сбой действий над элементами может привести к потере данных или путанице, команда должна предупреждать пользователей о элементах, которые не могут быть обработаны. Например, команда backup должна указывать на то, что некоторые элементы не удалось создать резервную копию.

Выбор статической или динамической команды для контекстного меню

Создание обработчиков контекстного меню

Настройка контекстного меню с помощью динамических команд

Контекстные меню и обработчики контекстного меню

Команды и сопоставления файлов

Справочник по контекстным меню