Поделиться через


Обновление текса на панели строки состояния

В этой статье объясняется, как изменить текст, отображаемый в панели состояния MFC. Строка состояния — объект окна класса CStatusBar — содержит несколько "панелей". Каждая панель — это прямоугольная область строки состояния, которую можно использовать для отображения сведений. Например, многие приложения отображают состояние CAPS LOCK, NUM LOCK и других ключей на самых правых панелях. Приложения также часто отображают информативный текст в самой левой области (панель 0), иногда называемую "областью сообщений". Например, строка состояния MFC по умолчанию использует область сообщений для отображения строки, объясняющей выбранный пункт меню или кнопку панели инструментов. На рисунке в строках состояния показана строка состояния из созданного мастера приложений MFC.

По умолчанию MFC не включает CStatusBar панель при создании панели. Чтобы активировать панель, необходимо использовать макрос ON_UPDATE_COMMAND_UI для каждой панели состояния и обновить панели. Так как панели не отправляют WM_COMMAND сообщения (они не похожи на кнопки панели инструментов), необходимо ввести код вручную.

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

Создание новой области

  1. Определите идентификатор команды области.

    В меню "Вид" щелкните "Представление ресурсов". Щелкните правой кнопкой мыши ресурс проекта и щелкните "Символы ресурсов". В диалоговом окне "Символы ресурсов" щелкните New. Введите имя идентификатора команды: например. ID_INDICATOR_PAGE Укажите значение идентификатора или примите значение, предлагаемое диалоговым окном "Символы ресурсов". Например, для ID_INDICATOR_PAGEэтого примите значение по умолчанию. Закройте диалоговое окно "Символы ресурсов".

  2. Определите строку по умолчанию для отображения в области.

    При открытии представления ресурсов дважды щелкните строку таблицы в окне, где перечислены типы ресурсов для приложения. При открытии редактора строковых таблиц выберите "Создать строку " в меню "Вставка ". Выберите идентификатор команды области (например, ID_INDICATOR_PAGE) и введите строковое значение по умолчанию, например Page. Закройте редактор строк. (Для предотвращения ошибки компилятора требуется строка по умолчанию.)

  3. Добавьте область в массив индикаторов .

    В файле MAINFRM. CPP найдите массив индикаторов . В этом массиве перечислены идентификаторы команд для всех индикаторов строки состояния, чтобы слева направо. В соответствующей точке массива введите идентификатор команды области, как показано ниже.ID_INDICATOR_PAGE

    static UINT indicators[] =
    {
       ID_SEPARATOR,           // status line indicator
       ID_INDICATOR_CAPS,
       ID_INDICATOR_NUM,
       ID_INDICATOR_SCRL,
       ID_INDICATOR_PAGE,
    };
    

Рекомендуемый способ отображения текста в области — вызвать SetText функцию-член класса CCmdUI в функции обработчика обновления для области. Например, может потребоваться настроить целочисленную переменную m_nPage , содержащую текущий номер страницы, и использовать SetText для задания текста области строковую версию этого числа.

Примечание.

Рекомендуется SetText использовать этот подход. Эту задачу можно выполнить на немного более низком уровне, вызвав CStatusBar функцию-член SetPaneText. Несмотря на это, вам по-прежнему нужен обработчик обновления. Без такого обработчика для панели MFC автоматически отключает панель, стирая его содержимое.

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

Создание отображаемого текста в области

  1. Добавьте обработчик обновления команд для команды.

    Вручную добавьте прототип обработчика, как показано здесь ID_INDICATOR_PAGE (в MAINFRM). H):

    afx_msg void OnUpdatePage(CCmdUI* pCmdUI);
    
  2. В соответствующем. CPP-файл, добавьте определение обработчика, как показано здесь ID_INDICATOR_PAGE (в MAINFRM). CPP):

    void CMainFrame::OnUpdatePage(CCmdUI* pCmdUI)
    {
       pCmdUI->Enable();
       CString strPage;
       strPage.Format(_T("Page %d"), m_nPage);
       pCmdUI->SetText(strPage);
    }
    

    Последние три строки этого обработчика — это код, отображающий текст.

  3. В соответствующей карте сообщений добавьте макрос ON_UPDATE_COMMAND_UI, как показано здесь ID_INDICATOR_PAGE (в MAINFRM). CPP):

    ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
    

После определения значения переменной члена m_nPage (класса CMainFrame) этот метод приводит к тому, что номер страницы отображается в области во время простоя обработки таким же образом, что приложение обновляет другие индикаторы. Если m_nPage изменения, отображение изменяется во время следующего цикла простоя.

Что вы хотите узнать больше о

См. также

Реализация строки состояния в MFC
Класс CStatusBar