Визуальное программирование и MFC

       

Создание панели состояния


Процесс создания панели состояния во многом схож с процессом создания панелей управления.

Сначала надо создать объект класса CStatusBar - он будет представлять панель состояния и управлять ею. Обычно для этого включают объект класса CStatusBar непосредственно в класс окна приложения, в котором будет размещена эта панель состояния:

class CMainFrame : public CMDIFrameWnd { protected: CStatusBar m_wndStatusBar; // панель состояния // другие описания класса ....... };

В некоторых случаях вместо использования класса CStatusBar от него предварительно наследуется дополнительный класс. В этом случае для создания панели состояния используют именно этот класс.

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

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

Через первый параметр указывается окно (родительское окно), для которого создается панель состояния.

Второй параметр позволяет задать характеристики панели управления, в том числе ее расположение внутри окна. Панель состояния является дочерним окном, поэтому в параметре стиля следует указать атрибут WS_CHILD. Атрибут WS_VISIBLE также следует указать, так как при его отсутствии панель не появится на экране, хотя и будет создана.

Панель состояния можно разместить либо вверху, либо внизу окна. Для этого в стиль панели состояния необходимо обязательно включить один из атрибутов CBRS_TOP или CBRS_BOTTOM.

Последний параметр метода Create определяет идентификатор дочернего окна панели состояния. По умолчанию используется идентификатор AFX_IDW_STATUS_BAR.

Следует заметить, что приложения, созданные MFC AppWizard, имеют меню View, содержащие строки “Toolbar” и “Status bar”. Эти строки позволяют показывать и скрывать панели управления и состояния в главном окне приложения. Для обработки сообщений о выборе строки меню “Status bar” используется метод OnUpdateControlBarMenu класса CFrameWnd.
Причем этот метод может управлять отображением панели состояния, если только она имеет идентификатор AFX_IDW_STATUS_BAR.

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

Каждый элемент панели состояния (индикатор) должен иметь отдельный идентификатор, например:

static UINT BASED_CODE indicators[] = { ID_SEPARATOR, // индикатор информации о состоянии ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };

Для того, чтобы связать каждый индикатор панели состояния с идентификатором текстовой строки (со строковым ресурсом), необходимо вызвать метод SetIndicators класса CStatusBar, передавая ему подготовленный массив идентификаторов . Этот метод загружает строковые ресурсы, соответствующие идентификаторам индикаторов, и размещает их на панели состояния. Через первый параметр передается указатель на массив идентификаторов индикаторов панели состояния. Общее количество индикаторов панели состояния, определенных в массиве идентификаторов, передается во втором параметре.

Обычно создание панели состояния производят при обработке сообщения WM_CREATE для главного окна приложения, например:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { // вызов метода базового класса для корректного создания окна if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

// создание панели управления (процесс создания рассматривался выше) ……… // создание панели состояния if (!m_wndStatusBar.Create(this) !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) return -1;

.......... return 0; }

Метод SetIndicators отображает в панели состояния строки, идентификаторы которых представлены в массиве indicators. При этом первый элемент массива определяет крайнюю левую строку в панели состояния.По умолчанию, строки в панели состояния выравниваются по правой границе. Можно получить доступ к любому элементу панели состояния по его индексу или идентификатору.

Для того, чтобы определить, какой идентификатор имеется у того или другого индикатора, можно воспользоваться методом GetItemID. Этот метод возвращает идентификатор индикатора по его индексу (порядковому номеру в панели состояния). Обратная операция выполняется при помощи метода CommandToIndex.


Содержание раздела