Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
129-160.doc
Скачиваний:
5
Добавлен:
11.11.2019
Размер:
343 Кб
Скачать
☆

Строка состояния

Строка состояния (status bar) — то объект класса CStatusBar, который является производным от CControlBar. Класс CControlBar поддерживает окна панелей элементов управления, размещаемых в окне-рамке, код которого хранится в файлах MainFrm.h и MainFrm.cpp. Так как объект строки состояния CStatusBar внедрен в рамочное окно CMainFrame, то MFC создает строки состояния, когда создает рамочное окно и уничтожает ее, когда уничтожается рамочное окно. По отношению к рамочному окну строки состояния является дочерним окном, которое связывается с объектом CStatusBar. В типичном SDI-приложении объект CStatusBar находится в нижней части клиентской области главного окна. Окно представления обычно располагается между панелью инструментов и строкой состояния.

Окно строки состояния не принимает ввод от пользователя и не генерирует командных сообщений. Назначение строки состояния — показать в соответствующих полях интерактивную справку и состояние некоторых клавиш клавиатуры. Строка состояния поддерживает два типа текстовых полей: поле сообщений и поля индикаторов. В поле сообщений отображаются данные о состоянии приложения и описание команд приложения. Чтобы увидеть описание команды, достаточно поместить курсор мыши на кнопку панели инструментов. Поле индикаторов отображает состояние клавиш Scroll Lock, Num Lock, Caps Lock. Окно приложения и строка состояний показаны на рис.5.15.

Для создания и отображения строки состояния в главном окне программы необходимо сконструировать объект класса CStatusBar, определить массив индикаторов, создать окно строки состояния и прикрепить его к объекту CStatusBar, установить соответствие массива индикаторов и полей статусной строки.

Рис. 5.15. Строка состояний в главном окне программы MyPaint

Для конструирования объекта строки состояния необходимо в классе главного окна объявить объект класса CStatusBar и вызвать конструктор этого класса, который устанавливает параметры объекта по умолчанию. Прототип конструктора класса CStatusBar следующий:

CStatusBar ( );

Для создания строки состояния как дочернего окна класс CStatusBar имеет функции-члены CStatusBar::Create() и CStatusBar::CreateEx(), которые создают строку состояния как дочернее окно, сопоставляют его с объектом CStatusBar и устанавливают начальный шрифт и высоту строки. Рассмотрим прототип функции CStatusBar::Create()

BOOL Create( CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, UINT nID = AFX_IDW_STATUS_BAR );

Первый параметр pParentWnd определяет указатель на родительское окно для строки состояния, которая сама является дочерним окном. Второй параметр dwCtrlStyle задает стили строки состояния. В дополнение к стандартным Windows стилям, значения которых задаются константами с префиксами WS_ ( табл.Б5 приложения Б), строка состояния поддерживает дополнительные стили. Константа CBRS_TOP используется для расположения строки состояния в верхней части окна-рамки. Стиль CBRS_BOTTOM указывается на положение строки состояния в нижней части окна-рамки. Стиль CBRS_NOALIGN означает, что строка состояния не меняет положения в процессе изменения размеров родительского окна. Параметр nID является идентификатором дочернего окна строки состояния. Стандартной строке состояния присваивается идентификатор дочернего окна AFX_IDW_STATUS_BAR.

После создания строки состояния и прикрепления ее к объекту CStatusBar необходимо определить массив индикаторов. Если строка состояния создается MFC Application Wizard в процессе создания нового приложения, то массив индикаторов создается в файле MainFrm.cpp и имеет такое определение.

static UINT IndicatorsIDs [] = { ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };

Идентификатор ID_SEPARATOR предназначен для создания пропуска. Так как этот идентификатор размещен первым в массиве, то первое поле строки состояния будет пустым. MFC автоматически отображает внутри этого поля интерактивную справку, поэтому константа ID_SEPARATOR задает поле для строки сообщения. Другие константы служат идентификаторами строковых ресурсов и определяют поля индикаторов. Идентификаторы стандартных индикаторов создаются MFC Application Wizard и сохраняются в ресурсе таблицы строк String Table. Фрагмент таблицы строк показан ниже.

ID_INDICATOR_EXT 59136 EXT ID_INDICATOR_CAPS 59137 CAP ID_INDICATOR_NUM 59138 NUM ID_INDICATOR_SCRL 59139 SCRL ID_INDICATOR_OVR 59140 OVR ID_INDICATOR_REC 59141 REC

Обработчики сообщений обновления пользовательского интерфейса используют три идентификатора строковых ресурсов для индикаторов состояния клавиатуры в базовом классе окна-рамки: ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL. Эти идентификаторы определены с помощью MFC, которая предоставляет обработчики сообщений для полей с заданными идентификаторами. Эти обработчики отображают текущее состояние клавиш Caps Lock, Num Lock и Scroll Lock. Обратите внимание: второе, третье и четвертое поля выравниваются по правому краю строки состояния, а первое занимает все оставшееся место в левой части строки. Чтобы самому управлять строкой состояния, нужно применить другие константы для индикаторов и другой идентификатор дочернего окна, создав его с помощью редактора символов (Resource Symbols).

Массив индикаторов передается в качестве аргумента методу CStatusBar::SetIndicators(), который приводит строку состояние в соответствие с содержимым массива индикаторов. Ниже дан формат функции.

BOOL CStatusBar::SetIndicators(const UINT* lpIDArray, int nIDCount );

Параметры функции: lpIDArray — указатель на массив идентификаторов, nIDCount— количество элементов в массиве указателей lpIDArray.

Поскольку строка состояния создается и уничтожается вместе с главным окном, то рассмотренные выше функции следует вызывать в методе создания главного окна до его отображения на экране. Главное окно создается в результате посылки Windows сообщения WM_CREATE. Обработчиком этого сообщения является функция CWnd::OnCreate().

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]