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


Инструменты, определяемые пользователем

MFC поддерживает определяемые пользователем средства. Определяемое пользователем средство — это специальная команда, которая выполняет внешнюю, указанную пользователем программу. Процесс настройки можно использовать для управления пользовательскими инструментами. Однако этот процесс нельзя использовать, если объект приложения не является производным от класса CWinAppEx. Дополнительные сведения о настройке см. в разделе "Настройка для MFC".

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

Tools tab in the Customize dialog box.
Вкладка "Средства настройки"

Включение поддержки определяемых пользователем средств

Чтобы включить определяемые пользователем средства в приложении, вызовите CWinAppEx::EnableUserTools. Однако сначала необходимо определить несколько констант в файлах ресурсов приложения для использования в качестве параметров для этого вызова.

В редакторе ресурсов создайте фиктивную команду, которая использует соответствующий идентификатор команды. В следующем примере мы используем ID_TOOLS_ENTRY в качестве идентификатора команды. Этот идентификатор команды помечает расположение в одном или нескольких меню, где платформа будет вставлять определяемые пользователем средства.

Необходимо выделить несколько последовательных идентификаторов в строковой таблице, чтобы представить определяемые пользователем средства. Число строк, которые вы задали в сторону, равно максимальному количеству пользовательских инструментов, которые могут определить пользователи. В следующем примере они именуются с помощью ID_USER_TOOL1 ID_USER_TOOL10.

Вы можете предложить пользователям предложения, чтобы помочь им выбрать каталоги и аргументы для внешних программ, которые будут называться инструментами. Для этого создайте два всплывающих меню в редакторе ресурсов. В следующем примере они именуются IDR_MENU_ARGS и IDR_MENU_DIRS. Для каждой команды в этих меню определите строку в строковой таблице приложения. Идентификатор ресурса строки должен быть равен идентификатору команды.

Можно также создать производный класс из класса CUserTool, чтобы заменить реализацию по умолчанию. Для этого передайте сведения о среде выполнения для производного класса в качестве четвертого параметра в CWinAppEx::EnableUserTools вместо RUNTIME_CLASS(класс CUserTool).

После определения соответствующих констант вызовите CWinAppEx::EnableUserTools , чтобы включить определяемые пользователем средства.

В следующем вызове метода показано, как использовать эти константы:

EnableUserTools(ID_TOOLS_ENTRY,
                ID_USER_TOOL1,
                ID_USER_TOOL10,
                RUNTIME_CLASS(CUserTool),
                IDR_MENU_ARGS,
                IDR_MENU_DIRS);

В этом примере вкладка "Инструменты" будет включена в диалоговое окно "Настройка ". Платформа заменит любую команду, соответствующую идентификатору ID_TOOLS_ENTRY команды в любом меню, набором определенных в данный момент пользовательских инструментов при открытии этого меню. Идентификаторы команд зарезервированы ID_USER_TOOL1 ID_USER_TOOL10 для использования для определяемых пользователем средств. Класс CUserTool обрабатывает вызовы пользовательских инструментов. Вкладка инструментов диалогового окна "Настройка" предоставляет кнопки справа от полей аргумента и записи каталога для доступа к меню IDR_MENU_ARGS и IDR_MENU_DIRS. Когда пользователь выбирает команду из одного из этих меню, платформа добавляет в соответствующее текстовое поле строку с идентификатором ресурса, равным идентификатору команды.

Включение предопределенных средств

Если вы хотите предварительно определить некоторые средства при запуске приложения, необходимо переопределить метод CFrameWnd::LoadFrame основного окна приложения. В этом методе необходимо выполнить следующие действия.

Добавление новых средств в LoadFrame
  1. Получите указатель на объект класса CUserToolsManager, вызвав CWinAppEx::GetUserToolsManager.

  2. Для каждого средства, которое требуется создать, вызовите CUserToolsManager::CreateNewTool. Этот метод возвращает указатель на объект класса CUserTool и добавляет только что созданное пользовательское средство во внутреннюю коллекцию инструментов. Если вы предоставили сведения о среде выполнения для производного класса CUserTool в качестве четвертого параметра CWinAppEx::EnableUserTools, CUserToolsManager::CreateNewTool будет создавать экземпляр и возвращать экземпляр этого класса.

  3. Для каждого средства задайте его текстовую метку, задав CUserTool::m_strLabel и задайте команду путем вызова CUserTool::SetCommand. Реализация класса CUserTool по умолчанию автоматически извлекает доступные значки из программы, указанной в вызовеSetCommand.

См. также

Настройка для MFC
Класс CUserTool
Класс CUserToolsManager
Класс CWinAppEx