- •Лабораторные работы по курсу «Инструментальные средства визуального программирования»
- •1. Программирование односвязного списка
- •1.1.Задание
- •1.2.Описание вариантов заданий
- •2.Перегрузка векторных и матричных операций
- •2.1.Задание
- •2.2.Бесценные методические указания
- •2.3.Некоторые особенности перегрузки операций
- •3.Классная работа
- •3.1.Постановка задачи
- •2.4.Варианты заданий
- •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 по курсу ооп
5.Приложение WinForms (cli)
Если все идет хорошо, значит, вы
чего-то не заметили
Закон Мерфи
Цель работы – освоить разработку приложения Windows на основе каркаса Windows Forms (4 час.).
5.1.Задание
Разработайте приложение на основе каркаса Windows Forms, которое бы иллюстрировало использование меню и наиболее часто встречающихся управляющих элементов: как метки, элементы ввода, кнопки и т.д.
5.2.Бесценные методические предписания
Рассмотрим сначала пример создания приложения, которое будет выполнять сложнейшие математические расчеты.
Шаг 1. Создаем проект. Выберите каркас приложения в соответствии с рис. 1: выберите Visual C++ в левой панели и Windows Forms Application – в правой. Тем самым мы получим возможность использовать, в частности, язык C++/CLI для программирования. Настоятельно рекомендую не устанавливать переключатель «Create directory for solution». В данном сценарии я нарек проект оригинальным именем DiaWin.
|
Рис. 1. Выбор каркаса приложения
По завершению работы мастака по созданию проекта не поленитесь запустить проект на построение и выполнение: если вам повезет, то вы увидите скромное окно умеренного размера. Скорее захлопните окно, пока оно не испортилось.
Посмотрите в окно Solution Explorer (рис. 2) на состав файлов проекта. Наибольший интерес для нас представляют файлы с расширением .h и .cpp.
Посмотрите на содержимое файла AssemblyInfo.cpp, в котором содержится, как следует из имени файла, информация (Info, если кто не знает) о сборке (Assembly): имя компании, продукта, авторские права, версия и т.п. НЕ изменяйте содержимое этого файла и вообще больше его по пустякам не открывайте. Та же рекомендация относится и к файлам stdafx.h и stdafx.cpp.
В файле DiaWin.cpp находится функция main(), с которой, как обычно, и начинается выполнение приложения. Обратите внимание, что в нем подключается пространство имен DiaWin (его имя совпадает с именем проекта) и оно объявлено (описано) в файле Form1.h. Собственно само выполнение приложения начинается с выполнения метода Run класса Application, который объявлен в пространстве имен System.Windows. В качестве параметра метода Run ему передается созданный с помощью оператора gcnew Form1() объект окно, которое вы и лицезрели при запуске программы на выполнение. Так какое же имя имеет объект окно нашего приложения? Под страхом смерти не изменяйте содержимое этого файла.
|
Рис. 2. Файлы проекта
Наибольший интерес для нас представляет файл Form1.h, в котором и находится описание «нашего» класса Form1 со всеми его атрибутами и методами. Когда вы будете щелкать по имени файла Form1.h, то в окне редактирования будет отображаться ресурс «окно», а не содержимое файла. Чтобы увидеть содержимое файла – описания и программный код, вызовите контекстное меню и выберите в нем команду View Code (Ctrl+Alt+0). Сделали? Ну тогда внимательно изучите его содержимое, так как это вам необходимо.
Прежде всего хочу предостеречь от попыток изменения той части описания класса Form1, которая ограничена директивами препроцессора
#pragma region Windows Form Designer generated code
/// ...
#pragma endregion
Эта часть описания класса модифицируется ИС и не стоит вмешиваться в их работу. Например, когда вы добавите на форму какой-нибудь управляющий элемент, то именно в эту часть описания формы, а конкретно в метод void InitializeComponent(void), будет добавлен программный код, задающий свойства этого элемента. Например, при добавлении на форму кнопки Button будет добавлен такой код:
void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
//
// button1
//
this->button1->Location = System::Drawing::Point(57, 45);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(65, 28);
this->button1->TabIndex = 0;
this->button1->Text = L"button1";
this->button1->UseVisualStyleBackColor = true;
Если вы захотите удалить кнопку, просто удалите ее с формы и этот программный код исчезнет как по мановению биты.
На всякий случай проверьте, работает ли еще приложение, не поломалось ли оно.
Шаг 2. Добавляем в окно управляющие элементы. Если вы сейчас не видите окно приложения в панели ИС, сделайте двойной щелчок ЛКМ по имени файла Form1.h. Если курсор мыши поместить в клиентскую часть окна и вызвать контекстное меню, то в нем можно выбрать команду Properties и изменить или задать свойства окна, например, его заголовок. Команда меню View Code позволяет перейти к описанию класса окна, которому по умолчанию присвоено имя Form1.
Вызовите панель ToolBox с управляющими элементами и красиво разместите в окне три элемента Label для поясняющих надписей, три TextBox (два для ввода чисел и один для вывода результата) и один кнопарь, щелчок по которому должен приводить к сложению двух чисел и выводу результата или к еще более сложной операции из наивысшей математики.
Задайте свойства управляющих элементов так, чтобы это было красиво и понятно любому юзеру. Конечно, вы найдете подходящие надписи вместо всяких там label, button и т.п. неподобствах.
Р |
Шаг
3. Осваиваем управляющие элементы
ввода/вывода TextBox.
Сделаем двойной щелчок по кнопочке
и перед нашими очами предстанет обработчик
этого действа, в который мы и добавим
наши математические измышления,
простите, вычисления:
|
-
Замечание. В операторе
X=Convert::ToDouble(textBox1->Text);
два двоеточия указаны потому, что Convert является абстрактным классом, в котором объявлены только статические методы. Этот класс имеет множество методов (см. справку), которые предназначены для преобразования данных из любого базового типа в другой базовый. Таких абстрактных классов в System достаточно много.
Оператор
X=Convert::ToDouble(textBox1->Text);
вполне можно заменить таким
X=Double::Parse(textBox1->Text);
Доработайте код обработчика таким образом, чтобы в том случае, если пользователь не введет хотя бы одно слагаемое из двух, он получил соответствующее сообщение.
Вот еще один из вариантов контроля ввода числовых данных пользователем:
|
Запрограммируйте и его, родимого, а предыдущий обработчик закомментируйте. За отдельную плату можно проиграть юзеру-лоху какой-нибудь ободряющий .wav-файл с помощью класса System::Media::SoundPlayer.
Шаг 4. Освоим менюшку? Сделайте активным окно формы, вызовите панель ToolBox, отыщите в ней банду Menus & Toolbars и заманите на форму стриптизера MenuStrip. Активируйте поле Type Here, в котором вы можете задать первую тему главного меню. Обратите внимание на малюсенький треугольник в верхнем правом углу панели меню (рис. 4). Щелчок ЛКМ по нему вызовет всплывающее меню, в котором вы можете выбрать команду Insert Standard Items и получить бесплатно «стандартное» меню, которое впоследствии вы сможете редактировать. В обработчике меню Exit просто вызовите функцию Close().
|
Рис. 4. Вызов помощника по строительству меню
Шаг 5. Овладеваем чтением и записью файлов. Давайте осчастливим юзера решением следующей задачи. Пусть в текстовом файле с произвольным числом записей находятся числа вещественного типа по два в каждой записи, например:
12,3 1e3
5 -10,5
3 17,9
Наша-ваша программа:
запрашивает у пользователя имя файла;
открывает и читает его записи в массивы (первое число в один массив, а второе – соответственно во второй);
выводит эти числа, строго поочередно, в элементы textBox1 и textBox2 на формочке по нажатию какого-нибудь завалящего кнопаря, клавише или любым другим понятным даже просвещенному юзеру способом;
сама нажимает кнопку сложения чисел;
в процессе суммирования чисел программа формирует результирующий массив;
по команде FileSave as программа сохраняет результаты вычислений в выходном файле.
Как-то само-собой получается, что выходной файл будет иметь, например, такой вид:
12.3 + 1e3 =1012.3
5 + -10.5 =-5.5
3 + 17.9 = 20.9
Шаг 6. Открываем и читаем файл. На панели ToolBox найдите группу Dialogs и извлеките из нее на форму элементы OpenFileDialog и SaveFileDialog заодно. Вы можете пристраивать их в любое место формы, они все равно «упадут вниз», но не разобьются.
Данные, которые будут прочитаны из файла, надо разместить в массивах. Используем для этой цели так называемые динамические массивы, память для которых будем выделять там, где это необходимо. Опишите массивы выше в файле, например, в таком месте:
protected:
array <Double> ^Arr1, ^Arr2, ^Arr3;

ис.
3. Віконце з
керуючими
елементами