Шаг 35.
Среда программирования Visual C++.
Запись в строку состояния

    На этом шаге мы рассмотрим изменение строки состояния.

    В некоторых случаях для оповещения о состоянии приложения недостаточно простой модификации меню и кнопки панели инструментов. Вернемся к приложению МуАрр. Команда Connect позволяет установить соединение лишь с одним источником данных. А как быть, если имеется несколько альтернативных источников и требуется часто переключаться между ними?

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

    Лучше всего такую информацию поместить в строку состояния (Status Bar) приложения. В строку состояния MFC-приложения уже выводится приглашение команды меню. Там же в отельных полях-индикаторах может отображаться состояние клавиш CAPS LOCK, NUM LOCK и SCROLL LOCK.

    В MFC поддержка строк состояния инкапсулирована в классе CStatusBar, посредством которого можно управлять составом и стием индикаторов, а также текстом в строке состояния.

    Сведения об индикаторах содержатся в массиве, где первый слева индикатор имеет индекс 0. По умолчанию первый индикатор является "резиновым" - он занимает часть строки состояния, свободную от остальных элементов, которые при этом выравниваются по правому краю. В первый индикатор каркас MFC-приложения выводит и формацию о выбранной команде меню или панели управления.

    При создании строки состояния используется массив идентификаторов строковых ресурсов, которые каркас связывает с соответствующими индикаторами. В дальнейшем к индикатору можно обращаться либо по индексу, либо по идентификатору строки.

    Для изменения текста в строке состояния рекомендуется использовать запись карты сообщений ON_UPDATE_COMMAND_ID, чтобы связать функцию-обработчик обновления пользовательского интерфейса с идентификатором строки индикатора. Для вывода текста в индикатор следует вызвать функцию SetText() объекта CCmdUI, передаваемого обработчику в качестве параметра. Учтите, что ClassWizard не связывает автоматически идентификатор индикатора c функцией-обработчиком, поэтому соответствующую запись в карту сообщений необходимо добавлять вручную.

    Изменить текст в индикаторе можно средствами функции CStatusBar::SetPaneText(). Однако при этом требуется создать обработчик обновления, потому что без него индикатор автоматически блокируется, а текст в нем удаляется.

    Проиллюстрируем сказанное на конкретных примерах. Заменим стандартные индикаторы CAPS LOCK, NUM LOCK и SCROLL LOCK приложения МуАрр на один индикатор, показывающий имя подключенного источника данных, которое хранится в переменной класса приложения. При отсутствии источника данных в индикатор должна выводиться строка "Database not connected" ("База данных не подсоединена"). На этом этапе можно не выбирать источник данных из списка, ограничившись выводом фиксированного имени.

    Создадим переменную-член класса СМуАррАрр для хранения имени текущего источника данных.

Текст измененного приложения можно взять здесь (46,0 Кб).

    Со следующего шага мы начнем знакомиться с созданием диалоговых окон.




Предыдущий шаг Содержание Следующий шаг