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

Задание 7. Добавление строки состояния

Чтобы добавить в MFC-программу строку состояния, необходимо определить объект класса CStatusBar как член класса главного окна, затем — массив, хранящий идентификаторы требуемых полей строки состояния, после чего вызвать две функции CStatusBar::Create() и CStatusBar::SetIndicators() из функции CMain-Frame::OnCreate() класса главного окна. Программа MyPaint с добавленной строкой состояния показана на рис. 5.15.

Выполните следующие действия для добавления строки состояния в программу.

  1. Добавьте переменную m_StatusBar класса CStatusBar в раздел protected класса CMainFrame. Для этого откройте окно Class View и выберите в контекстном меню класса CMainFrame команду AddAdd Variable. В появившемся диалоговом окне Add Member Variable Wizard в поле Access выберите значение protected, в поле Variable type введите с клавиатуры тип переменной CStatusBar, в поле Variable name — имя переменной m_StatusBar. Нажмите кнопку Finish для окончания работы с диалоговым окном. В файл интерфейса класса CMainFrame будет добавлено объявление переменной, которое показано во фрагменте кода полужирным шрифтом.

// MainFrm.h : interface of the CMainFrame class class CMainFrame : public CFrameWnd { protected: // create from serialization only CMainFrame(); DECLARE_DYNCREATE(CMainFrame) // Attributes //. . . CSplitterWnd m_SplitterWnd; virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext); CToolBar m_ToolBar; CStatusBar m_StatusBar; public: afx_msg int OnCreate (LPCREATESTRUCT lpCreateStruct); };

  1. Откройте файл MainFrm.cpp и определите массив IndicatorIDs. Для этого откройте окно Solution Explorer (Обозреватель решений). Разверните список файлов, щелкнув на значке + слева от имени MyPaint. В узле Source Files (Исходные файлы) двойным щелчком откройте в окне редактора кода файл MainFrm.cpp. Вставьте код, выделенный полужирным шрифтом, перед конструктором класса CMainFrame.

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_CREATE() END_MESSAGE_MAP() static UINT IndicatorsIDs [] = { ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; // CMainFrame construction/destruction CMainFrame::CMainFrame() { // TODO: add member initialization code here }

  1. В файле MainFrm.cpp добавьте в функцию CMain-Frame::OnCreate() код для создания строки состояния. Для этого в окне Class View в списке методов класса CMainFrame найдите метод с именем OnCreate() и дважды щелкните мышью. В окне редактора кода отобразится код этой функции. Перед вызовом функции m_ToolBar.CreateEx() вставьте код, выделенный полужирным шрифтом. Строка состояния создается в результате вызова функции CStatusBar::Create(). Массив IndicatorIDs, передаваемый функции CStatusBar::SetIndicators(), задает идентификатор каждого поля строки состояния.

int CMainFrame::OnCreate (LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate (lpCreateStruct) == -1) return -1; //добавление строки состояния if (!m_StatusBar.Create(this) || !m_StatusBar.SetIndicators( IndicatorsIDs, sizeof(IndicatorsIDs) / sizeof(UINT)) ) return -1; // TODO: Add your specialized creation code here //добавление панели инструментов if (!m_ToolBar.CreateEx (this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ) return -1; if (!m_ToolBar.LoadToolBar (IDR_MAINFRAME)) return -1; m_ToolBar.EnableDocking (CBRS_ALIGN_ANY); EnableDocking (CBRS_ALIGN_ANY); DockControlBar(&m_ToolBar); return 0; }

  1. Сохраните изменения, выполнив команду FileSave All. Постройте программу и запустите ее на выполнение. Вы получите окно программы MyPaint с панелью инструментов, строкой состояния, в которой отображается интерактивная справка по командам меню и кнопкам.

  2. Для завершения создания меню View добавьте команду, скрывающую или отображающую строку состояния. Для этого откройте меню IDR_MAINFRAME в редакторе меню. Щелкните на меню View для отображения команд. Добавьте в поле Type Here новую команду. Задайте для нее надпись &Status Bar. Щелкните на пустом поле для сохранения введенной надписи. Затем двойным щелчком на поле с надписью &Status Bar откройте окно Properties для вводимой команды. Редактор меню уже предложил идентификатор команды ID_VIEW_STATUSBAR. Введите в поле Prompt строку Show or hide status bar (отобразить или скрыть строку состояния). Сохраните выполненные изменения, вызвав команду FileSave All или нажав на кнопку Save All.

  3. Как и для команды Toolbar, для команды Status Bar не нужно писать обработчик, потому что он предоставляется библиотекой MFC. Функция CFrameWnd::OnBarCheck() обрабатывает и команду Toolbar, и команду Status Bar. Однако для этого необходимо иметь стандартный идентификатор команды меню ID_VIEW_STATUS_BAR. Для изменения идентификатора команды откройте файл сценария ресурса MyPaint.rc в редакторе Notepad или любом другом текстовом редакторе. В разделе описания меню замените идентификатор ID_VIEW_STATUSBAR на ID_VIEW_STATUS_BAR, сохраните файл. На вопрос, надо ли загрузить файл заново, ответьте Yes. В окне свойств в поле ID вы увидите скорректированный идентификатор команды.

  4. Теперь можно построить и запустить программу MyPaint.

Обратите внимание: при каждом выделении команды меню или помещении курсора мыши над кнопкой панели инструментов MFC отображает интерактивную справку внутри первого поля новой строки состояния, а также статус клавиш Caps Lock, Num Lock и Scroll Lock во втором, третьем и четвертом полях.

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