Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
388
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

Кроме того, можно воспользоваться содержимым поля itemData, которое равно значению параметра IpszText функции CStatusBarCtrl::SetText. Например, через этот параметр можно передать идентификатор изображения, которое должно быть нарисовано в данной области строки состояния, или идентификатор шрифта, которым будет написан текст, или какую-либо другую информацию.

В заключение нам осталось описать, как строка состояния обрабатывает команду ON_UPDATE_COMMAND_UI. Как обычно, обработчик этой команды вызывается во время цикла простоя последовательно для всех областей строки состояния. Доступными функциями класса CCmdUI, отвечающего за обработку, являются Enable и SetText, Первая из них блокирует или разблокирует соответствующую область. При этом надо иметь в виду, что у заблокированных областей выключается отображение текста. Вторая функция позволяет изменить текст, который выводится в текущей области. Следует помнить, что при выводе текста не происходит автоматического изменения размеров области.

На этом мы заканчиваем рассмотрение наиболее часто используемых панелей элементов управления —- панели инструментов и строки состояния — и переходим к описанию не менее интересного класса

CDialogBar,

Класс CDialogBar

Панель диалога — панель элементов управления с функциональными возможностями немодального блока диалога, которая содержит стандартные элементы управления Windows. Она действует подобно блоку диалога,поддерживая, в частности, перемещение между элементами при помощи клавиши <ТаЬ>. Кроме того, для нее, как и для блока диалога, используется шаблон диалога. Это с одной стороны. А с другой, ее можно рассматривать как более мощную панель инструментов. Извещения от элементов управления панели диалога посылаются ее родительскому окну точно так же, как и от кнопок панели инструментов.1 Основное их различие заключается в том, что панель диалога может содержать произвольные элементы управления, в то время как панель инструментов, стандартно, — только кнопки. Панель диалога наиболее часто используется в качестве дополнения к основному окну, и любые извещения, такие как BN_CLICKED или EN_CHANGE будут посланы ее родителю — главному окну приложения.

Класс CDialogBar имеет всего две основные функции: конструктор

CDialogBar::CDialogBar()

который создает объект этого класса, и функцию Create, как обычно, отвечающую за создание окна Windows и присоединение его к текущему объекту:

BOOL CDialogBar::Create( CWnd *pParentWnd, LPCTSTR IpszTemplateName, UINT nStyle,

UINT nID) и

BOOL CDialogBar::Create( CWnd *pParentWnd, UINT nIDTemplate, UINT nStyle, UlNTnID)

Функция имеет следующие параметры: pParentWnd — указатель на родительское окно (не может быть равен NULL); IpszTemplateName — указатель на строку, содержащую имя ресурса шаблона панели диалога; второй вариант функции вместо имени использует идентификатор ресурса nIDTemplate; nID — идентификатор панели диалога; nStyle — стиль выравнивания панели диалога:

CBRS_TOP CBRS_BOTTOM CBRS_LEFT CBRS_RIGHT

панель диалога располагается у верхней стороны фрейма панель диалога располагается у нижней стороны фрейма панель диалога располагается у левой стороны фрейма панель диалога располагается у правой стороны фрейма

CBRS_NOALIGN панель диалога не меняет своего расположения, когда у родительскогоокнаизменяется размер

Эта функция (в любом варианте) загружает шаблон диалога из ресурса, заданного параметром IpszTemplateName или nIDTemplate, создает окно панели диалога, устанавливает его стиль и ассоциирует с объектом CDialogBar. Если определен стиль CBRS_TOP или CBRS_BOTTOM, то ширина панели определяется шириной фрейма, а высота берется из шаблона nIDTemplate. Если же определен стиль

CBRS_LEFT или CBRS_RIGHT, то высота панели определяется высотой фрейма, а ширина берется из шаблона nIDTemplate.

Все остальные функциональные возможности этот класс получает от своего базовогоCControlBar.

ControlBars — пример приложения

Как известно, лучше один раз увидеть, чем сто раз услышать. Перейдем к примеру использования, конечно не всех, но хотя бы части заявленных возможностей. Сначала несколько слов о составе примера. Весь код приложения, окно которого представлено на рис. 27, занимает более 800 строк, не считая добавленных нами комментариев, плюс еще три файла для хранения битовых массивов панелей инструментов и файл пиктограммы приложения. Мы офаничились лишь двумя файлами исходного текста на C++ — этого больше чем достаточно.

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

В главное окно приложения помещены следующие панели элементов управления:

Q панель инструментов (команд) — привязанная к верхней части окна без возможности перемещения. В нее вставлен комбинированный список для задания стиля выравнивания (обработчик его сообщений — функция Create Tool Bar), выбор элемента которого отслеживается функцией OnStyle;

Q панель инструментов рисования — плавающая с возможностью привязки. Все кнопки имеют кроме рисунка еще и текст (функция Create Pane Bar). Выбор одного из инструментов сопровождается вызовом функции OnPane;

Q панель диалога — привязанная к левой части окна без возможности перемещения. Содержит элементы управления: статическая рамка, два флажка для отображения/скрытия панели инструментов (команд)1 и панели инструментов рисования (функция OnViewPane), и, наконец, комбинированный список отображения/выбора инструмента рисования, выбор элемента которого отслеживается функцией

OnSelChangePane;

Идентификатор команды для управления режимом показа панели инструментов (команд) равен ID_V1EW_TOOLBAR, который интерпретируется как команда и равляет панелями с идентификатором AFX_IDW TOOLBAR, так что специального кода создавать не надо — все делает библиотека классов MFC.

Q строка состояния — состоящая из четырех областей: для подсказки, отображения режима NUMLOCK, для демонстрации обработки во время простоя (функция On UpdateIndicatorldle) и для отображения текущего времени примерно раз в секунду по сигналу от таймера (функция OnTimer).

Осталось рассмотреть меню, в котором имеются, кроме общих, следующие пункты:

Qменю "Вид" — управляет отображением/скрытием панелей управления (кроме панели диалога) и строкой состояния;'

Qменю "Стиль" — управляет выбором стиля выравнивания. Используется, как и в случае панели инструментов (команд), функция OnStyle;

Оменю "Инструмент" — обеспечивает задание количества столбцов для отображения панели инструментов рисования (функции CPane2colomn и CPaneScolomn),