Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция. Основы разработки оконных приложений
Содержание: последовательные и событийно-управляемые программы; событие и обработчик события; визуальное программирование как средство создания графического интерфейса пользователя; пример разработки простейшего оконного приложения; оконное приложение обработки матриц; файлы проекта приложения; основные шаги разработки оконного приложения
Введение
До сих пор мы занимались разработкой последовательных консольных программ. Цель этой лекции – сделать первые шаги в овладении основами проектирования программ (приложений), общающихся с пользователем с помощью оконного интерфейса. Для определенности мы будем рассматривать операционную систему Windows и инструментальную среду программирования MS Visual Studio 2008. Следующий раздел поможет понять специфику стоящей перед нами задачи.
1. Особенности разработки оконных приложений (по сравнению с консольными программами)
1.1. Последовательные и событийно-управляемые программы
Консольные программы в основном являются последовательными. Работа последовательной программы можно описать схемой: Запуск программы -> выполнение инструкций -> завершение.
Именно такие программы мы писали до сих пор. Последовательная программа, конечно, может быть разветвленной, т. е. содержать операторы ветвления и цикла. Она также может содержать инструкции, временно приостанавливающие ее выполнение. Например, оператор ввода приостанавливает программу до того момента, как будут заданы значения всем вводимым переменным. Термин последовательная используется здесь в том смысле, что после запуска программы для любых конкретных исходных данных выполняется определенная последовательность инструкций, и программа заканчивает работу (передает управление операционной системе). Для общения с пользователем последовательные программы в основном используют потоковый консольный ввод (вывод).
Все оконные приложения – это программы, управляемые событиями. Такие программы после запуска находятся в состоянии ожидания событий (иногда говорят о «бесконечном цикле» ожидания). В качестве события можно, например, рассматривать:
• щелчок (одинарный или двойной) кнопкой мыши (правой или левой) в некотором месте окна приложения;
• выбор пункта меню (горизонтального, контекстного, и т.д.);
• «зависание» (достижение без щелчка) мыши над некоторым элементом окна;
• нажатие клавиши (или комбинации клавиш) клавиатуры;
• приход сигналов устройств компьютера;
• достижение встроенным таймером заданного момента времени.
На каждое событие приложение должно ответить, как того требует решаемая задача (говорят: обработать событие), и снова перейти в состояние ожидания. Завершение работы приложения также рассматривается как реакция на событие (нажатие кнопки «Выход», набор на клавиатуре комбинации ALT+F4, и т. д.). Программный код, описывающий реакцию на некоторое событие, называется обработчиком этого события. Обработчик представляет собой подпрограмму (метод класса), тело которой, пишется по законам последовательного программирования. Программист может использовать стандартные обработчики или создавать собственные обработчики, отражающие специфику разрабатываемого приложения.
Работу событийно-управляемой программы можно описать схемой:
Если говорить более точно, то приложение не ожидает событие, а постоянно опрашивает операционную систему на предмет возникновения событий.
1.2. Стандартный интерфейс оконного приложения
Оконные приложения должны общаться с пользователем по некоторым стандартным канонам, посредством окон стандартного вида и стандартных схем диалога, т. е. обеспечивать стандартный интерфейс пользователя. Поскольку окна выводятся в графическом режиме монитора, то этот интерфейс является графическим (GUI – Graphical User Interface). В виду сложности самостоятельного программирования графического интерфейса, для его создания используются специальные технологии визуального программирования, которое, в свою очередь, основывается на объектно-ориентированном программировании.
Коротко смысл визуального программирования состоит в следующем. Имеется библиотека стандартных элементов графического интерфейса. Элементы в графическом изображении расположены на специальных панелях. С помощью расположения элементов на заготовке окна приложения создается интерфейс приложения. Параллельно с формированием окна автоматически формируется стандартная часть кода приложения. Когда образ окна готов, пишутся нестандартные обработчики, определяемые функциональным назначением программы.
В системах программирования фирмы Borland (широко известны C++ Builder и Delphi) в качестве стандартной библиотеки графических элементов интерфейса используется VCL (Visual Component Library).
В среде Microsoft Visual Studio библиотека интерфейсных компонентов является частью библиотеки классов платформы .NET Framework.
2. Примеры разработки оконных приложений в MS Visual Studio
Изучить приемы визуального программирования можно лишь на практике. Методология разработки оконных приложений будет показана на двух простых примерах.
Пример 1. Оконное приложение вычисления факториала – см. https://code-live.ru/post/first-windows-form (автор Сергей Левитин). Предлагается создать это приложение по шагам, как предложено на сайте.
Пример 2. Оконное приложение обработки матрицы, вычисляющее сумму всех элементов матрицы и произведения элементов каждой строки матрицы. Форма приложения представлена на рис. 1.
Размеры матрицы (число строк n и число столбцов m) считываются из текстовых окон (компонента textBox); команда на задание размеров – нажатие кнопки (на которой имеет надпись «Ввод n, m»), кнопка – компонента button. Вторая кнопка (с надписью «Вычислить») используется для запуска вычисления результатов задачи.
Для отображения массивов на форме будет использоваться компонента dataGridView. Это компонента с большими возможностями; она может заполняться из различных источников данных, в том числе таблиц и запросов баз данных. Но мы будем ее использовать для ввода элементов матрицы и вывода значений произведений строк матрицы. Число строк и столбцов компонент компоненты dataGridView настраивается в соответствии с введенными значениями n и m.
Приложение не должно иметь ограничений на размеры массивов; для хранения массивов в оперативной памяти рекомендуется использовать динамические массивы.
Визуальные компоненты для вывода результатов выбираются из условия задачи: компонента textBox – для простых значений (в рассматриваемой задаче - суммы элементов матрицы), компонента dataGridView – для таблиц значений (в примере – произведений элементов строк).
Последовательность разработки приложения:
1. Открываем Visual Studio, выбираем Файл→Создать→Проект. В открывшемся окне, в его левой части выбираем пункт С++, затем пункт CLR. В правой части окна выбираем Приложение Windows Forms. В нижней части пишем имя проекта (у нас matrix), папку, в которой будут сохраняться файлы проекта, и жмем Ok.
2. С панели элементов перетаскиваем форму текстовые окна (textbox), метки (label), кнопки (button) и таблицы (dataGridView). Заметим, что элемент dataGridView находится на Панели элементов в группе «Данные».
3. Используя панель «Свойства» и мышь, настраиваем размеры и расположение элементов формы, как показано на рис. 1. Для правой компоненты dataGridView (в примере dataGridView3), в которую будут выводиться вычисленные произведения строк, на панели «Свойства» задаем свойству RowsHeaderVisible значение False, чтобы не показывались заголовки строк этой компоненты.
4. Пишем обработчики событий. Сначала делаем двойной щелчок мышью на кнопке «Ввод n, m» (в предложенном коде button2), оказываемся в коде обработчика события нажатия этой кнопки и вставляем в него операторы для считывания n и m и настраивания числа строк и столбцов элементов dataGridView; получаем такой код обработчика:
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{n=System::Convert::ToInt16(textBox1->Text);//считывание n m из
m=System::Convert::ToInt16(textBox2->Text);//текстовых окон
if(n==0||m==0)//если n или m равно 0, вывод сообщения
MessageBox::Show("Введите n, m", "m и n не равны нулю!");
else
{//далее задаются число строк и столбцов dataGridView
dataGridView2->RowCount=n;
dataGridView2->ColumnCount=m;
dataGridView3->RowCount=n;
dataGridView3->ColumnCount=1;
}
}
Затем делаем двойной клик на кнопке «Вычислить» (button1) и добавляем код в обработчика события нажатия этой кнопки. Получаем обработчик:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{ double **a, s,p; int i,j; //a-динамичекая матрица, s-сумма матрицы,
//р – произведение каждой строки, i, j - счетчики
a=new double*[n];//распределяем память по указатели на строки матрицы
for (i=0; iValue);
}//считали матрицу с формы в память
s=0;//далее вычисляем сумму элементов матрицы и
//произведение элементов каждой строки
for (i=0;iValue=System::Convert::ToString(p);
}
textBox3->Text=System::Convert::ToString(s);//вывод суммыв текс окно
}
5. Запускаем приложение и проверяем его работу на примерах.
6. Добавляем главное меню (элемент menuStrip из группы «Меню и панели инструментов» Панели элементов) на верхнюю часть формы (элемент menuStrip из группы «Меню и панели инструментов» Панели элементов). Внизу под формой показывается пиктограмма этого элемента. Добавить пункты меню можно либо в полоску вверху формы, или через панель «Свойства», пункт Items. Далее на панели свойств нажимаем кнопку «События» (желтая «молния») перехода к обработчикам событий и связываем пункт меню «Ввод n, m» с обработчиком кнопки button2, а пункт меню «Вычислить» с обработчиком события кнопки button1. Меню готово! Окно работающего приложения см. на рис. 2. Более подробно с процессом создания главного меню приложения см. по ссылке: http://www.cs.trinity.edu/~thicks/Tutorials/Visual-Studio-Windows-App-Form-MenuStrip-Apps/Visual-Studio-Windows-App-Form-MenuStrip-Apps.html
3. Основные шаги разработки оконного приложения
1. Выбор существующего проекта или создание нового.
2. Выбор существующей формы проекта или создание новой.
3. Размещение на форме необходимых компонентов.
4. Установка свойства формы и ее компонентов.
5. Создание обработчиков событий.
6. Написание кодов обработчиков событий, выполняющий нужные для работы программы действия (этот код заставит каждый компонент делать то, что необходимо пользователю).
7. Если требуется, повторение шагов 2 – 6 для каждой формы.
8. Сохранение проекта. Рекомендуется сохранять проект (или измененную форму) не только после окончания работы, но и после каждого шага разработки приложения, начиная со второго.