Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обучение VC++ / ЛекцииИнтернетС++ / Лекция_лаб_практикум.doc
Скачиваний:
64
Добавлен:
16.02.2016
Размер:
932.35 Кб
Скачать

Управление строкой состояния

Стандартной строке состояния присваивается идентификатор дочернего окна AFX_IDW_STATUS_BAR. Именно его каркас приложений ищет для вывода подсказки по элементам меню. Обработчики сообщений обновления пользовательского интерфейса используют три идентификатора строковых ресурсов для индикаторов состояния клавиатуры в базовом классе окна-рамки: ID_INDICATOR_CAPS, ID_INDICATOR_NUM и ID_INDICATOR_SCRL. Чтобы самому управлять строкой состояния, нужно применить другой идентификатор дочернего окна и другие константы для индикаторов.

Идентификатор для окна строки состояния назначается вызовом CstatusBar::Create в функции-члене OnCreate производного класса окна-рамки. Эта функция содержится в файле MainFrm.cpp, генерируемом AppWizard. Идентификатор окна — третий параметр функции Create и по умолчанию равен AFX_IDW_STATUS_BAR.

Чтобы назначить свой идентификатор, замените вызов

m_wndStatusBar.Create(this);

на m_wndStatusBar.Create (this, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, ID_MY_STATUS_BAR),

Конечно, нужно определить и константу ID_MY_STATUS_BAR в файле resource.h, применяя редактор символов.

Стандартное меню View, формируемое каркасом приложений, позволяет включать и отключать показ строки состояния. Эта логика реализуется кодом, использующим идентификатор окна AFX_IDW_STATUS_BAR, который тоже придется изменить. В своем производном классе окна-рамки напишите элементы таблицы сообщений и обработчики для команды ID_VIEW_STATUS_BAR и сообщений, связанных с обновлением пользовательского интерфейса. ID_VIEW_STATUS_BAR — это идентификатор элемента меню Status Bar. Обработчики в производном классе переопределяют стандартные обработчики из базового класса CFrameWnd.

Контрольные вопросы:

  1. Что такое меню?

  2. Какие виды меню вы знаете?

  3. Что такое панель инструментов?

  4. Что такое строка состояния?

  5. Какие секции есть в строке состояния?

  6. Какой класс отвечает за работу со строками состояния?

  7. Какой класс отвечает за работу с панелями инструментов?

  8. Какой класс отвечает за работу с меню?

Лабораторная работа 3.1

Задание:

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

Ход работы:

Создание проекта.

Создайте стандартный проект и назовите его L3_1.

Создание ресурсов меню.

Для того чтобы создать меню необходимо выполнить команду меню Insert->Resource, в появившемся окне выбрать Menu и нажать кнопку Add (Рис. 3.1.1).

После этого необходимо перейти на вкладку Resource View (Рис. 3.1.2) и выбрав ваш ресурс меню приступить к его редактированию. Для того чтобы корректно отображались символы кириллицы нужно щелкнуть правой клавишей на ресурсе вашего меню, и в появившемся контекстном меню выбрать пункт Properties. Далее перед вами откроется окно свойств, в котором следует установить русский язык (Рис.3.1.3).Создайте два ресурса меню, такие, как показано на рисунке 3.1.4

Если щелкнуть правой клавишей мыши на одном из пунктов, и в появившемся контекстном меню выбрать пункт Properties, то откроется окно свойств данного пункта где можно в окне Prompt написать подсказку, которая будет отображаться в строке состояния при выборе данного пункта меню. Напишите для каждого пункта свою подсказку. Например подсказка для пункта Цвета линий->Красный:

Рисует фигуру красным контуром .

Программирование контекстного меню. Для того чтобы сделать меню контекстным необходимо добавить в класс CL3_1View обработчик сообщения WM_CONTEXTMENU.

//Создание контекстного меню

void CL3_1View::OnContextMenu(CWnd* pWnd, CPoint point)

{ // Создаем меню

CMenu menu;

// Связываем созданное меню с ресурсом

menu.LoadMenu(IDR_MENU1);

// Конструируем контекстное меню, таким образом,

// чтобы оно раскравылась справа от курсора и

// пункты меню выравнивались по левому краю.

menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,this); }