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


Пошаговое руководство. Размещение элементов управления на панели инструментов

В этом разделе описывается добавление кнопки панели инструментов, которая содержит элемент управления Windows на панель инструментов. В MFC кнопки панели инструментов должна быть Класс CMFCToolBarButton- производным классом, например Класс CMFCToolBarComboBoxButton, Класс CMFCToolBarEditBoxButton, Класс CMFCDropDownToolbarButton или Класс CMFCToolBarMenuButton.

Добавление элементов управления в панели инструментов

Чтобы добавить элемент управления в панель инструментов, выполните следующие действия.

  1. Резервируется вспомогательный идентификатор ресурса для кнопки в родительском диалоговом окне инструментов. Дополнительные сведения о создании кнопки с помощью редактора панели инструментов в Visual Studio см. в разделе Редактор панелей инструментов.

  2. Резервируется образ Значок кнопки панели инструментов () для кнопки во всех трех изображениях родительского инструмента.

  3. В обработчике сообщений, процессы сообщение AFX_WM_RESETTOOLBAR, выполняющих следующее:

    1. Создайте элемент управления "кнопка" с помощью CMFCToolbarButton- производного класса.

    2. Замените фиктивная кнопку новым элементом управления с помощью CMFCToolBar::ReplaceButton. Этот объект можно создать кнопки в стеке, поскольку ReplaceButton копирует объект кнопки и поддержку копию.

Примечание

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

Элементы управления панели инструментов и настройки

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

При включении настройки создается диалоговое окно Настроить в обработчике OnViewCustomize настройки с помощью класса Класс CMFCToolBarsCustomizeDialog. Прежде чем отобразить диалоговое окно Настроить, можно вызвать метод CMFCToolBarsCustomizeDialog::Create, вызов CMFCToolBarsCustomizeDialog::ReplaceButton, чтобы заменить стандартной кнопки новым элементом управления.

Пример: Создать поле со списком найти

В этом разделе описывается, как создать элемент управления " Поле со списком Find, отображается на панели инструментов и содержится недавн-, используемые строки поиска. Пользователь может добавлять строки в элементе управления, а затем нажать ключ в документ или нажмите ключ escape-последовательности для возвращения фокуса наиболее ЭВМ. В этом примере высказывать документа см. в разделе Класс CEditView- производном представлении.

Создание элемента управления найти

Сначала создайте элемент управления " Поле со списком Find:

  1. Добавьте кнопку и его команды к ресурсам приложения:

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

    2. Создайте новый пункт меню с идентификатором команды ID_EDIT_FIND

    3. Добавляет новую строку «поиск» text\nFind в таблице строк и присвойте ей идентификатор команды. ID_EDIT_FIND_COMBO Этот идентификатор используется как идентификатор команды кнопки поля со списком Find.

      Примечание

      Поскольку ID_EDIT_FIND стандартную команду, которая обрабатывается CEditView, не требуется реализовать специальный обработчик для этой команды. Однако необходимо реализовать обработчик для новой команды ID_EDIT_FIND_COMBO.

  2. Создайте новый класс, CFindComboBox, производное от Класс CComboBox.

  3. В классе CFindComboBox, переопределите метод виртуального PreTranslateMessage. Этот метод включает процесс поля со списком сообщение WM_KEYDOWN. Если пользователь ударяет ключ escape-последовательности (VK_ESCAPE), возвращает фокус в главное окно фреймовому. Если пользователь ударяет ключ (VK_ENTER), опубликовать на основном фреймовое окно сообщения WM_COMMAND, содержащее идентификатор команды. ID_EDIT_FIND_COMBO

  4. Создание класса для кнопки поля со списком Find, производный от Класс CMFCToolBarComboBoxButton. В этом случае он — CFindComboButton.

  5. Конструктор CMFCToolbarComboBoxButton принимает 3 параметра: идентификатор команды кнопки, индекса образа кнопки и стиля поля со списком. Задайте следующие параметры:

    1. Передайте ID_EDIT_FIND_COMBO как идентификатор команды.

    2. Используйте CCommandManager::GetCmdImage с ID_EDIT_FIND для получения индекс образа.

    3. Стили поля со списком Для списка доступных см. в разделе Стили полей со списками.

  6. В классе CFindComboButton переопределите методCMFCToolbarComboBoxButton::CreateCombo. Далее необходимо создать объект CFindComboButton и вернуть указатель на него.

  7. Следует использовать макрос IMPLEMENT_SERIAL, чтобы сделать комбинированную кнопки упорным. Диспетчер рабочих областей автоматически загружает и сохраняет состояние кнопки в реестре Windows.

  8. Реализуйте обработчик ID_EDIT_FIND_COMBO в представлении документа. Используйте CMFCToolBar::GetCommandButtons с ID_EDIT_FIND_COMBO для извлечения всех кнопок поля со списком Find. Может существовать несколько копий кнопки с таким же идентификатором команды из-за настройки.

  9. В обработчике сообщений OnFind ID_EDIT_FIND, используйте CMFCToolBar::IsLastCommandFromButton, чтобы определить, выполняется ли команда кнопки, из поля со списком Find. В этом случае поиск текста и добавьте строку поиска в поле со списком.

Добавление элемента управления найти на главной панели инструментов

Чтобы добавить кнопку поля со списком в панель инструментов, выполните следующие действия.

  1. Реализуйте обработчик сообщений OnToolbarResetAFX_WM_RESETTOOLBAR в главном окне фреймовом.

    Примечание

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

  2. В обработчике AFX_WM_RESETTOOLBAR просмотрите идентификатор инструментов, т е WPARAM сообщения AFX_WM_RESETTOOLBAR. Если идентификатор инструмента равно параметрам инструмента, который содержит кнопку поля со списком Find, вызовите метод CMFCToolBar::ReplaceButton, чтобы заменить кнопку Find (то есть кнопка с идентификатором ID_EDIT_FIND) команды с объектом CFindComboButton.

    Примечание

    Можно создать объект CFindComboBox в стеке, поскольку ReplaceButton копирует объект кнопки и поддержку копию.

Добавление элемента управления найти в диалоговое окно настройки

В обработчике OnViewCustomize настройки необходимо вызвать метод CMFCToolBarsCustomizeDialog::ReplaceButton, чтобы заменить кнопку Find (то есть кнопка с идентификатором ID_EDIT_FIND) команды с объектом CFindComboButton.

См. также

Ссылки

Диаграмма иерархии

Класс CMFCToolBar

Класс CMFCToolBarButton

Класс CMFCToolBarComboBoxButton

Класс CMFCToolBarsCustomizeDialog

Другие ресурсы

Классы MFC