Пошаговое руководство. Размещение элементов управления в панели инструментов
В этом разделе описывается, как добавлять кнопки панели инструментов, которая содержит элемент управления windows forms на панели инструментов.В MFC, кнопка панели инструментов должна быть Класс CMFCToolBarButton- производным классом, например Класс CMFCToolBarComboBoxButton, Класс CMFCToolBarEditBoxButton, Класс CMFCDropDownToolbarButton или Класс CMFCToolBarMenuButton.
Добавление элементов управления в панели инструментов
Чтобы добавить элемент управления в панель инструментов, выполните следующие действия:
Зарезервируйте фиктивное идентификатор ресурса для кнопки в родительском ресурсе панели инструментов.Дополнительные сведения о создании кнопки с помощью редактора панели инструментов в Visual Studio см. в разделе Редактор панелей инструментов.
Зарезервируйте образ значок кнопки панели инструментов () для кнопки во всех растровых изображениях родительской панели инструментов.
В обработчике сообщений, который обрабатывает сообщение AFX_WM_RESETTOOLBAR, выполните следующие действия:
Создайте элемент управления " Кнопка " с помощью CMFCToolbarButton- производного класса.
Замените думмичная кнопку с новым элементом управления с помощью CMFCToolBar::ReplaceButton.Можно создать объект button в стеке, поскольку ReplaceButton копирует объект button и обслуживает копию.
Примечание |
---|
Если включена возможность настройки в приложении, можно сбросить панель инструментов с помощью кнопки Сброс на вкладке Панели инструментов диалогового окна Настроить чтобы увидеть обновленный элемент управления в приложении после перекомпиляции.Состояние панели инструментов сохраняется в реестре windows, и загружены и применены данные реестра после того, как метод ReplaceButton выполняется во время запуска приложения. |
Элементы управления " Панель инструментов и настройка
Вкладка Команды диалогового окна Настроить содержит список команд, доступных в приложении.По умолчанию диалоговое окно Настроить обрабатывает меню приложения и строит список стандартных кнопок панели инструментов в каждой категории меню.Чтобы поддерживать расширенную функциональность, которую элементы управления предоставляют Панель инструментов, необходимо заменить стандартной кнопки панели инструментов с пользовательским элементом управления в диалоговом окне Настроить.
При включении настройку можно создать диалоговое окно Настроить в обработчике OnViewCustomize настройки с помощью класса Класс CMFCToolBarsCustomizeDialog.Прежде чем отобразить диалоговое окно Настроить путем вызова CMFCToolBarsCustomizeDialog::Create, вызовите CMFCToolBarsCustomizeDialog::ReplaceButton, чтобы заменить стандартной кнопки с новым элементом управления.
Пример: Создать поле со списком поиск
Этот раздел описывает, как создать элемент управления " поле со списком Find, который отображается на панели инструментов и содержится недавн-используемые строки поиска.Пользователь может вводить строки в элементе управления, после чего нажать входной ключ для поиска документ или нажмите клавишу escape, чтобы вернуть фокус главного фрейма.В этом примере предполагается, что документ выводится в производном Класс CEditView- представлении.
Создание элемента управления find
Сначала создайте элемент управления " поле со списком Find:
Кнопка добавить и его команды к ресурсам приложения:
В ресурсах приложения добавьте новую кнопку с идентификатором команды ID_EDIT_FIND на панели инструментов в приложении растровым изображениям и ко всем связанным с панелью инструментов.
Создание нового пункта меню с идентификатором команды ID_EDIT_FIND
Добавьте новую строку «Найти текст\nНайти» в таблице строк и присвойте ей идентификатор команды 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 копирует объект button и обслуживает копию.
Добавление элемента управления в диалоговое окно настройки поиска
В обработчике OnViewCustomize настройки, вызов CMFCToolBarsCustomizeDialog::ReplaceButton, чтобы заменить кнопку Find (то есть кнопка с идентификатором ID_EDIT_FIND) команды с объектом CFindComboButton.
См. также
Ссылки
Класс CMFCToolBarComboBoxButton
Класс CMFCToolBarsCustomizeDialog