- •Лабораторные работы по курсу «Инструментальные средства визуального программирования»
- •1. Программирование односвязного списка
- •1.1.Задание
- •1.2.Описание вариантов заданий
- •2.Перегрузка векторных и матричных операций
- •2.1.Задание
- •2.2.Бесценные методические указания
- •2.3.Некоторые особенности перегрузки операций
- •2.4.Варианты заданий
- •3.Классная работа
- •3.1.Постановка задачи
- •3.2.Задания
- •3.3.Методические наказания к первой части работы
- •3.4.Методические наказания ко второй части работы
- •4.Алгоритмы
- •Задание
- •Варианты классов и их обработки
- •5.Приложение WinForms (cli)
- •5.1.Задание
- •5.2.Бесценные методические предписания
- •Int nRec;//Число записей файла, оно же будет числом элементов массивов
- •6.Графика в WinForms (cli)
- •6.1.Задание
- •6.2.Бесценные методические предписания
- •6.3.Индивидуальные задания
- •7.1.Задание
- •7.2.Бесценные методические наставления
- •8.Квикли файдингуем рутсы
- •8.1.Дармовые методические рекомендации
- •8.2.Задание
- •Варианты индивидуальных заданий
- •9.Приложение, основанное на модальном диалоговом окне
- •9.1.Нудные методические указания Модальные и немодальные диалоговые окна
- •Ресурсы и элементы управления
- •Сценарий создания приложения
- •Разбор приложения
- •Усовершенствование приложения
- •10.Разработка графического редактора
- •Задание.
- •10.1.Проектирование программы
- •10.2.Разработка интерфейса
- •Установка флагов
- •Создание меню и панели инструментов
- •Обработка сообщений о нажатии кнопки мыши
- •10.3.Рисование
- •10.4.Растягивание фигур
- •10.5.Обновление изображения
- •10.6.Сохранение метафайла на диске и его загрузка
- •Список ссылок
- •Работы, выполненные в осеннем семестре 2016/2017 по курсу ооп
Установка флагов
Выберем такие идентификаторы для флагов:
bLineFlag – прямая линия;
bRectangleFlag – прямоугольник;
bDrawFlag – фигура произвольной формы;
bFillFlag – флаг для заливки фигур.
Шаг 1. Сгенерируйте приложение SDI.
Из меню File в Visual C++ выберите New Project, в дереве Project Types выберите MFC, а в Templates – MFC Application. Не устанавливайте переключатель “Create directory for solution”. Присвойте проекту имя (в данном примере выбрано имя Painter) и щелкните ОК. В списке Resource language не забудьте выбрать элемент со значением Русский.
|
Рис.1. Выбор мастера для создания каркаса приложения
Среда MVS 2010 выведет следующее окно, в правой части которого перечислены заданные по умолчанию свойства проекта.
Значения всех свойств проекта можно оставить такими, как они заданы по умолчанию, кроме группы свойств Application Type (тип приложения): выберите радиокнопарь Single document вместо выбранной по умолчанию кнопки Multiple documents (рис. 2) и в группе Project style выберите радиокнопку MFC standard вместо установленной по умолчанию кнопки Visual Studio.
На вкладке User Interface Features выберите радиокнопку Use a classic menu и Use a classic docking toolbar (рис. 3).
Щелкните кнопку Finish для того, чтобы завершить создание приложения.
Шаг 2. Протестируйте полученное приложение.
Запустите приложение на выполнение с помощью команды F5, чтобы убедиться в том, что приложение – пока вы не начали его усовершенствовать – еще работоспособно.
|
Рис. 2. Свойства приложения
|
Рис. 3. Настройка свойств панели инструментов
Шаг 3. Добавление переменных. Откройте заголовочный файл PainterView.h и добавьте в объявление класса вида CPainterView описание таких переменных (это удобнее сделать с помощью с помощью мастера ИС):
|
Класс CPoint (точка) предназначен для облегчения работы с координатами точек (пикселей) и его единственными член-данными являются целочисленные данные x и y.
Шаг 4. Добавление член-функции MakeAllFlagsFalse().
Присваивать начальные значения флагам, как и любым другим член-данным класса, надо в конструкторе. Так как эти флаги необходимо сбрасывать (присваивать им значение false) всякий раз при выборе пользователем другой фигуры, то имеет смысл делать это в специальной функции MakeAllFlagsFalse(). Поместите прототип этой функции
void MakeAllFlagsFalse();
в заголовочный файл класса вида CPainterView вслед за описанием приведенных выше переменных.
Реализацию метода надо поместить в файл PainterView.срр (например, в конец файла после строки #endif //_DEBUG):
|
Новый метод надо вызвать в конструкторе класса CPainterView:
|
Проверьте, что приложение компилируется без ошибок. Его можно запустить и на выполнение, хотя оно пока ничего полезного делать не умеет.
Создание меню и панели инструментов
Шаг 5. Добавление меню Tools.
Для добавления меню надо в окне рабочего пространства выбрать вкладку ResourceView, раскрыть дерево ресурсов, и в теме Menu выбрать IDR_MAINFRAME, сделав двойной щелчок ЛКМ (рис. 4). Если вкладка ResourceView отсутствует, то выполните команду ViewResource view для ее открытия.
|
Рис. 4. Выбор ресурса меню
В окне справа Вы должны увидеть окно редактора меню с уже имеющимися темами главного меню и пустым прямоугольником вслед за последней командой меню Help.
Для добавления новой темы главного меню поместите указатель мыши в пустой прямоугольник, щелкните ЛКМ и введите наименование темы меню Tools и нажмите клавишу Enter. Вы можете с помощью мыши перетащить команду меню Tools в нужную позицию в главном меню, например, поместить ее перед командой Help. Обратите внимание, что в окне Properties (оно расположено справа) отображаются свойства выбранной темы меню. Если окно свойств не отображается, откройте его с помощью команды ViewOther WindowsProperty Window Alt+Enter.
Для добавления команд меню щелкните ЛКМ по пустому прямоугольнику под темой Tools, введите имя команды меню Line и нажмите клавишу Enter. Аналогичным способом добавьте другие команды меню Tools (рис. 5).
|
Рис. 5. Добавление команд меню Tools
Для вставки новых тем или команд меню достаточно нажать клавишу Ins в нужном месте, а для удаления – клавишу Del. Если после создания команд меню Вы посмотрите их свойства, то обнаружите, что мастер присвоил им идентификаторы. Например, команде Line присвоен идентификатор ID_TOOLS_LINE (см. окно Properties). Эти идентификаторы программист может назначать по своему усмотрению, но лучше оставить их такими, как есть. Подобные идентификаторы имеют все ресурсы приложения, в частности, элементы управления, и они часто используются в тексте программы для ссылки на соответствующий ресурс.
Для каждой темы главного меню или команды меню в свойстве Prompt можно указать текст, который должен выводиться в строке статуса окна приложения при выборе данной темы или команды меню. В поле Caption можно указать символ & перед той буквой наименования команды меню, которую можно использовать для выбора команды меню с помощью соответствующей клавиши. В качестве примера посмотрите на свойства тем и команд меню, сгенерированных мастером.
Шаг 6. Добавление кнопок на панель инструментов.
Для добавления кнопок на панель инструментов раскройте ветвь Toolbar в окне ResourceView и щелкните ЛКМ идентификатор IDR_MAINFRAME. Откроется окно редактора ресурсов, в котором Вы сможете добавить пять новых кнопок, дублирующих команды меню Tools. Всякий раз, когда Вы рисуете что-нибудь на кнопке, редактор ресурсов добавляет в конец панели новую пустую кнопку.
Используя редактор ресурсов, создайте пять кнопок и нанесите на них подходящие изображения, например такие, как на рис. 6.
Удалить ненужные кнопки можно путем «вытаскивания» их из панели инструментов вниз, на свободное место.
Шаг 7. «Привязывание» кнопок к командам меню Tools.
Привязать кнопки к соответствующим командам меню очень просто: сделайте двойной щелчок ЛКМ по кнопке и в появившемся окне Properties в выпадающем списке ID выберите нужный идентификатор команды. Например, для кнопки с изображение линии имеет смысл выбрать идентификатор ID_TOOLS_LINE, присвоенный команде Line меню Tools.
Постройте приложение и запустите его на выполнение. Проверьте, что приложение имеет меню и кнопки, которые Вы создали. И команды меню, и кнопки будут недоступными, так как мы еще не связали их с обработчиками.
|
Рис. 6. Новые кнопки на панели инструментов
Шаг 8. Связывание флагов со средствами пользовательского интерфейса.
Когда пользователь будет выбирать какой-либо инструмент рисования, например, прямоугольник, мы должны установить флаг для прямоугольника и сбросить все остальные флаги. Сделать это нужно в обработчике соответствующей команды меню, который еще нужно создать с помощью мастера. Для этого выберите вкладку ClassView, в ней выберите класс CPainterView и вызовите для него окно свойств (Alt+Enter). В окне свойств щелкните по кнопке Events, найдите идентификатор требуемой команды (например, ID_TOOLS_LINE), щелкните ЛКМ по знаку “+” и создайте обработчик этой команды OnToolsLine(). Подобным образом создайте обработчики для всех остальных команд меню Tools. Отредактируйте обработчики команд следующим очевидным образом:
|
Теперь если Вы запустите приложение на выполнение, то должны увидеть доступными все команды меню Tools и кнопки панели инструментов. Если какая-либо команды меню будет отображаться как недоступная, значит, для нее не создан обработчик.
Для завершения разработки интерфейса осталось сделать совсем немного: дать знать пользователю о текущем выбранном режиме (фигуре). Для достижения этой благородной цели мы воспользуемся методом SetCheck().
Шаг 9. Пометка команд меню.
Перед отображением меню приложение для каждой команды вызывает специальный метод обновления пользовательского интерфейса, в котором, в частности, можно установить пометку для текущей выбранной команды. Для создания таких методов создайте обработчики команд для сообщения UPDATE_COMMAND_UI по такой же технологии, как и при создании обработчиков команд меню на предыдущем шаге.
В каждый созданный обработчик добавьте один-единственный оператор, в котором вызывается функция SetCheck(). Например, для линии обработчик должен иметь такой вид:
|
Тестируйте приложение, запустив его на выполнение. Убедитесь в том, что при выборе какой-либо команды или нажатии кнопки выбранная команда меню помечается галочкой, а кнопка переходит в состояние нажатой. Все другие кнопки при этом отображаются как ненажатые.
Таким образом, разработка меню и инструментальной панели как главных средств пользовательского интерфейса завершены.
