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

Задание для самостоятельной домашней разработки.

Разработайте несколько других фигур для вывода на экран при помощи функции Polygon. Так как за перерисовку экрана отвечает функция OnDraw, то любое изменение окна приложения приведет к его перерисовки и соответственно к потере изображения. Сделайте так, чтобы рисование шло внутри функции OnDraw. Для этого для каждого типа фигур создайте массивы, хранящие точки их вывода на экран, а в обработчиках сообщений от мыши добавляйте эти точки в соответствующие массивы, и вызывайте функцию заставляющую перерисовывать экран – Invalidate. Саму же перерисовку выполняйте в функции OnDraw.

Лекция 3. Меню. Панели инструментов и строки состояния Методические рекомендации

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

Следует иллюстрировать нижеследующий материал наглядными примерами. Очень хорошо для этого подходят программы из пакета Microsoft Office.

План

  1. Меню Windows

  2. Панели элементов управления и каркас приложения

  3. Панель инструментов

  4. Строка состояния.

Меню Windows

Меню Microsoft Windows – знакомый всем компонент приложения, состоящий из горизонтального списка элементов верхнего уровня; с ним связаны меню, открывающиеся, когда пользователь выбирает какой – либо из его элементов. Обычно для окна-рамки определяется ресурс меню по умолчанию, загружаемый при создании этого окна. Можно определить ресурс и не связанный с каким-либо окном-рамкой. В этом случае программа должна вызывать функции, необходимые для загрузки и активизации меню.

Ресурс меню полностью определяет начальное состояние меню: какие-то команды могут быть отключены, помечены галочкой, или сгруппированы с помощью разделителей. Раскрывающиеся меню могут быть многоуровневыми. Если команда меню первого уровня связанна с подменю, то рядом с этой командой появляется стрелочка указывающая вправо.

В Visual C++ входит простой в применении редактор меню. Это средство позволяет создавать и редактировать меню в режиме WYSIWYG. Для каждой команды меню открывается диалоговое окно, в котором можно задать характеристики этой команды. Полученное определение ресурса сохраняется в RC-файле проекта. Каждой команде меню присваивается свой идентификатор, который определяется в файле Resource.h.

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

Обновление командного пользовательского интерфейса

Весьма часто приходится менять внешний вид элементов меню, чтобы отразить внутреннее состояние программы. Например, если в меню Edit присутствует команда Clear All (Очистить все), то Вы, может быть, захотите отключить ее, если очищать нечего. Без сомнения, в меню Windows-программ Вы видели отключенные и помеченные галочками команды.

При программировании в Win32 синхронизировать состояние элементов меню в соответствии с состоянием приложения не так-то просто. Каждый участок кода, изменяющий внутреннее состояние программы, должен содержать операторы, обновляющие меню. В MFC-библиотеке реализован другой подход, основанный на вызове специальной функции-обработчика, которая и обновляет командный пользовательский интерфейс при каждом открытии меню. Аргумент этой функции — объект CCmdUI, содержащий указатель на соответствующий элемент меню. Используя этот указатель, функция-обработчик может изменить внешний вид команды меню. Подобные обработчики применимы к элементам раскрывающихся меню, но не к меню верхнего уровня, постоянно присутствующим на экране. Такой обработчик нельзя использовать, например, для отключения меню File.

Требования к определению обработчиков, обновляющих командный пользовательский интерфейс, сходны с требованиями к определению обработчиков команд. Вам нужна собственно функция, специальный элемент таблицы сообщений и, конечно же, прототип функции. Идентификатор (в нашем случае IDM_ZOOM) применяется тот же, что и для команды. Вот что надо добавить к файлу кода для класса “вид”:

BEGIN_MESSAGE_MAP(CMyView, CView)

ON_UPDATE_COMMMAND_UI(IDM_ZOOM, OnUpdateZoom) END_MESSAGE_MAP()

void GMyView::OnUpdateZoom(CCmdUI* pCmdUI)

{

pCmdUI->SetCheck(m_bZoomed); // in_bZoomed - переменная-член класса

}