- •Задание 6. Добавление обработчиков сообщений для кнопок панели инструментов
- •Обработчики сообщений для кнопок панели инструментов программы MyPaint
- •Строка состояния
- •Задание 7. Добавление строки состояния
- •Отображение полей строки состояния
- •Изменение интерактивной справки
- •Подведение итогов
- •Глава 6. Создание модальных диалоговых окон
- •Диалоговые окна и ресурсы шаблонов диалоговых окон
- •Задание 1. Создание ресурса шаблона диалогового окна программы FontDemo
- •Элементы управления диалогового окна Format и их свойства
- •Классы диалоговых окон
- •Функции класса cDialog для управления диалоговыми окнами
- •Функции класса cDialog для манипулирования диалоговыми окнами
Отображение полей строки состояния
Строка состояния программы MyPaint содержит только стандартные поля, поддерживаемые библиотекой MFC. Чтобы добавить пользовательское поле, потребуется включить его идентификатор в массив, передаваемый в функцию CStatusBar::SetIndicators(). Кроме того, необходимо использовать редактор строк Microsoft Visual Studio, чтобы определить соответствующий строковый ресурс с таким же идентификатором, как и у поля. Если такая строка не определена, то программа завершится сообщением об ошибке.
Когда MFC отображает пользовательское поле, она делает его достаточно широким, чтобы поместился соответствующий строковый ресурс. Однако строка состояния автоматически не отображается, так как вначале поле заблокировано. Чтобы сделать поле доступным для строкового ресурса, необходимо сгенерировать для него обработчик сообщения UPDATE_COMMAND_UI (т. е. функцию с префиксом имени OnUpdate) и вызвать из него функцию CCmdUI::Enable(), опуская параметры или передавая значение TRUE. Тогда строковый ресурс станет видимым.
Если необходимо отображать различные строки, передавайте нужную строку функции CCmdUI::SetText(). Заметьте: при размещении новой строки ширина поля не будет корректироваться. Если новая строка, переданная в CCmdUI::SetText(), длиннее строкового ресурса, то она будет усечена.
Изменение интерактивной справки
Вспомните: текст интерактивной справки хранится в строковом ресурсе с таким же идентификатором, как у команды меню и соответствующей кнопки панели инструментов. Строковый ресурс может хранить вместе с интерактивной справкой текст всплывающей подсказки, который состоит из справки и символа перевода строки (\n), а за ним следует текст всплывающей подсказки.
Интерактивную справку или всплывающую подсказку команды меню можно модифицировать. Для этого откройте меню в редакторе меню, выполнив двойной щелчок на команде, и отредактируйте текст в поле Prompt. Чтобы изменить интерактивную справку или всплывающую подсказку для кнопки панели инструментов, откройте ее в редакторе панели инструментов, выберите кнопку (щелкнув на ней в области панели инструментов), выполните двойной щелчок в области редактирования и отредактируйте текст в поле Prompt.
Можно также отредактировать текст в редакторе строк. Если ID_MYCOMMAND — идентификатор кнопки панели инструментов или команды меню, то в редакторе строк нужно открыть ресурс String Table. Отредактируйте строку ID_MYCOMMAND или добавьте строку с этим идентификатором, если он еще не существует.
Кроме того, можно изменить стандартное сообщение о простое библиотеки MFC. Если команды меню не выделены, и кнопки панели инструментов не нажаты, MFC отображает информацию о простое в первом поле строки состояния. Стандартное сообщение о простое — это строка Ready. Если хотите задать другое сообщение о простое, то отредактируйте строку с идентификатором AFX_IDS_IDLEMESSAGE в редакторе строк (рис. 5.16).
Рис. 5.16. Таблица строк с ресурсом AFX_IDS_IDLEMESSAGE
Если строка состояния новой программы сгенерирована мастером AppWizard (при выборе опции Initial Status Bar в окне User Interface Features), то код, необходимый для отображения строки состояния, описанный в этом параграфе, будет включен в исходные файлы. Для внесения изменений в поля или изменения их расположения отредактируйте массив IndicatorsIDs с идентификаторами полей, размещенный в начале файла MainFrm.cpp.
