Пошаговое руководство. Размещение элементов управления на панели инструментов
В этом разделе описывается добавление кнопки панели инструментов, которая содержит элемент управления Windows на панель инструментов. В MFC кнопки панели инструментов должна быть Класс CMFCToolBarButton- производным классом, например Класс CMFCToolBarComboBoxButton, Класс CMFCToolBarEditBoxButton, Класс CMFCDropDownToolbarButton или Класс CMFCToolBarMenuButton.
Добавление элементов управления в панели инструментов
Чтобы добавить элемент управления в панель инструментов, выполните следующие действия.
Резервируется вспомогательный идентификатор ресурса для кнопки в родительском диалоговом окне инструментов. Дополнительные сведения о создании кнопки с помощью редактора панели инструментов в Visual Studio см. в разделе Редактор панелей инструментов.
Резервируется образ Значок кнопки панели инструментов () для кнопки во всех трех изображениях родительского инструмента.
В обработчике сообщений, процессы сообщение AFX_WM_RESETTOOLBAR, выполняющих следующее:
Создайте элемент управления "кнопка" с помощью CMFCToolbarButton- производного класса.
Замените фиктивная кнопку новым элементом управления с помощью CMFCToolBar::ReplaceButton. Этот объект можно создать кнопки в стеке, поскольку ReplaceButton копирует объект кнопки и поддержку копию.
Примечание
Если включено настройки в приложении, можно сбросить панель инструментов, нажав кнопку Сброс на вкладке Панели инструментов диалогового окна Настроить для просмотра обновленный элемент управления в приложении после повторной компиляции.Состояние " сохраняется в реестре Windows и загружаются и применяются данные реестра после вызова метода ReplaceButton выполняется во время запуска приложения.
Элементы управления панели инструментов и настройки
Вкладка Команды диалогового окна Настроить содержится список команд, доступных в приложении. По умолчанию процессы диалогового окна Настроить меню приложения и построения список стандартных кнопок панели инструментов в каждой категории меню. Чтобы сохранить расширенная функциональность, элементы управления панели инструментов предоставляют, необходимо заменить стандартной кнопки панели инструментов с пользовательским элементом управления в диалоговом окне Настроить.
При включении настройки создается диалоговое окно Настроить в обработчике OnViewCustomize настройки с помощью класса Класс CMFCToolBarsCustomizeDialog. Прежде чем отобразить диалоговое окно Настроить, можно вызвать метод CMFCToolBarsCustomizeDialog::Create, вызов CMFCToolBarsCustomizeDialog::ReplaceButton, чтобы заменить стандартной кнопки новым элементом управления.
Пример: Создать поле со списком найти
В этом разделе описывается, как создать элемент управления " Поле со списком Find, отображается на панели инструментов и содержится недавн-, используемые строки поиска. Пользователь может добавлять строки в элементе управления, а затем нажать ключ в документ или нажмите ключ escape-последовательности для возвращения фокуса наиболее ЭВМ. В этом примере высказывать документа см. в разделе Класс CEditView- производном представлении.
Создание элемента управления найти
Сначала создайте элемент управления " Поле со списком Find:
Добавьте кнопку и его команды к ресурсам приложения:
В ресурсах приложения добавьте новой кнопки с идентификатором команды ID_EDIT_FIND к панели инструментов в приложении и ко всем растровым изображениям, связанным с панелью инструментов.
Создайте новый пункт меню с идентификатором команды ID_EDIT_FIND
Добавляет новую строку «поиск» text\nFind в таблице строк и присвойте ей идентификатор команды. ID_EDIT_FIND_COMBO Этот идентификатор используется как идентификатор команды кнопки поля со списком Find.
Примечание
Поскольку ID_EDIT_FIND стандартную команду, которая обрабатывается CEditView, не требуется реализовать специальный обработчик для этой команды. Однако необходимо реализовать обработчик для новой команды ID_EDIT_FIND_COMBO.
Создайте новый класс, CFindComboBox, производное от Класс CComboBox.
В классе CFindComboBox, переопределите метод виртуального PreTranslateMessage. Этот метод включает процесс поля со списком сообщение WM_KEYDOWN. Если пользователь ударяет ключ escape-последовательности (VK_ESCAPE), возвращает фокус в главное окно фреймовому. Если пользователь ударяет ключ (VK_ENTER), опубликовать на основном фреймовое окно сообщения WM_COMMAND, содержащее идентификатор команды. ID_EDIT_FIND_COMBO
Создание класса для кнопки поля со списком Find, производный от Класс CMFCToolBarComboBoxButton. В этом случае он — CFindComboButton.
Конструктор CMFCToolbarComboBoxButton принимает 3 параметра: идентификатор команды кнопки, индекса образа кнопки и стиля поля со списком. Задайте следующие параметры:
Передайте ID_EDIT_FIND_COMBO как идентификатор команды.
Используйте CCommandManager::GetCmdImage с ID_EDIT_FIND для получения индекс образа.
Стили поля со списком Для списка доступных см. в разделе Стили полей со списками.
В классе CFindComboButton переопределите методCMFCToolbarComboBoxButton::CreateCombo. Далее необходимо создать объект CFindComboButton и вернуть указатель на него.
Следует использовать макрос IMPLEMENT_SERIAL, чтобы сделать комбинированную кнопки упорным. Диспетчер рабочих областей автоматически загружает и сохраняет состояние кнопки в реестре Windows.
Реализуйте обработчик ID_EDIT_FIND_COMBO в представлении документа. Используйте CMFCToolBar::GetCommandButtons с ID_EDIT_FIND_COMBO для извлечения всех кнопок поля со списком Find. Может существовать несколько копий кнопки с таким же идентификатором команды из-за настройки.
В обработчике сообщений OnFind ID_EDIT_FIND, используйте CMFCToolBar::IsLastCommandFromButton, чтобы определить, выполняется ли команда кнопки, из поля со списком Find. В этом случае поиск текста и добавьте строку поиска в поле со списком.
Добавление элемента управления найти на главной панели инструментов
Чтобы добавить кнопку поля со списком в панель инструментов, выполните следующие действия.
Реализуйте обработчик сообщений OnToolbarResetAFX_WM_RESETTOOLBAR в главном окне фреймовом.
Примечание
Платформа отправляет сообщение в главное окно при фреймовому инструмент инициализируется во время запуска приложения, или когда инструмент сброшен во время настройки.В любом случае необходимо заменить стандартной кнопки панели инструментов с пользовательской кнопки поля со списком Find.
В обработчике 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.
См. также
Ссылки
Класс CMFCToolBarComboBoxButton
Класс CMFCToolBarsCustomizeDialog