Создание приложений под Windows
Одним из распространенных видов пользовательских приложений на сегодняшний день есть проекты, которые широко используют элементы графического интерфейса. Эти проекты разрабатываются и выполняются на аппаратных платформах, функционирующих под управлением ОС Windows и выполняют типовые задачи интеллектуального клиента информационной системы клиент-серверной архитектуры.
Чтобы определить сущность проектов современных Windows-приложений, необходимо рассмотреть сущность связанных понятий: решения (solution), проект (project), пространство имен (namespace), сборник (assembly). Рассмотрим подробнее основные понятия и этапы создания приложений под Windows. Создание приложений под Windows
С точки зрения программиста, работающего над проектом, результатом работы компилятора среды разработки (Visual Studio) будет решение. С позиций общеязыковой среды выполнения CLR каркаса Framework, компилятор создает сборник, содержащий перемещаемый исполняемый файл. Решение содержит один или несколько проектов.
Если решение содержит несколько проектов, один из них должен быть назначен стартовым. Выполнение решения начинается со стартового проекта. Проекты одного решения могут быть зависимыми или независимыми. Например, все проекты одного структурного подразделения произвольно выбранного предприятия могут быть, для удобства, собранные в одном решении и иметь общие свойства.
Windows-приложения
Проекты Windows-приложений разрабатываются на основе объектно-ориентированного программирования, то есть данные представляются в виде экземпляров классов - объектов, с последующей реализацией операций над этими объектами. Стартовый проект должен иметь точку входа - класс, содержащий статическую процедуру с именем Main.
В момент запуска решения на выполнение этой процедуре автоматически передается управление приложением. В существующее решение можно добавлять как новые, так и существующие проекты. Один проект может входить в несколько решений. Классы проекта систематизированы в одном или нескольких пространствах имен. Пространства имен позволяют структурировать проекты, содержащие большое количество классов, объединяя в одну группу близкие классы.
Если над проектом работает несколько исполнителей, то, как правило, каждый из них создает свое пространство имен. Кроме структуризации, это дает возможность присваивать классам имена, не задумываясь об их уникальности за пределами пространства. Проект представляет собой основную единицу, с которой работает программист для создания Windows-приложения.
При использовании в качестве среды разработки, Visual Studio, он выбирает соответствующий тип, после чего, механизм среды создает начальную структуру проекта с точкой входа. По умолчанию начальная структура Windows-приложения содержит класс Form1 - наследник класса Form библиотеки FCL. Этот класс содержит точку входа в проект (процедуру Main), что вызывает статический метод Run класса Application.
Метод Run предназначен для создания объекта класса Form1 и открытие его видимого образа - формы. Формы представляют собой визуальные объекты, обеспечивающие функциональность Windows-приложения. Обычно Windows-приложение содержит несколько форм, которые открываются и закрываются в процессе работы. В каждый конкретный момент на экране может быть открыто одно или несколько форм. Пользователь имеет возможность работать с одной формой или переключаться по ходу работы на другую форму.
Процесс создания формы
Следует четко различать процесс создания формы, то есть объекта, принадлежащего классу Form (наследнику этого класса) и процесс вывода формы на экран. Для показа формы служит метод Show этого класса, который вызывается соответствующим объектом. Для сокрытие формы используется метод Hide. На практике методы Show и Hide изменяют свойство Visible объекта, устанавливая ее значение или true (да), или false (нет).
Между сокрытие формы и ее закрытием, существует разница и реализуются эти события различными методами: Hide и Close. Первый из них делает форму невидимой, однако сам объект существует. Метод Close закрывает форму, освобождая занятые ею ресурсы. Вызвать метод Show после вызова метода Close невозможно, если только не создать объект заново.
Открытие и показ формы всегда означает вызов метода Show. То есть, формы должны иметь метод Close, но не имеют метода Open. Формы, как и все объекты, создаются при вызове конструктора формы. Форма, которая открывается в процедуре Main при вызове метода Run, называется главной формой проекта. Ее закрытие приводит к закрытию всех остальных форм и завершению Windows-приложения.
Завершить приложение можно, также, программно, вызвав в нужный момент статический метод Exit класса Application. Закрытие других форм не приводит к завершению проекта. Обычно главная форма проекта всегда открыта, тогда как остальные формы открывается и закрывается (скрываются). Можно создавать формы как объекты класса Form.
Однако такие объекты довольно редки. Чаще всего создается специальный класс FormX - наследник класса Form. В частности, так происходит во время создания начальной платформы Windows-приложения, когда создается класс Form1 - наследник класса Form. Возможна ситуация, когда вновь создаваемая форма во многом должна быть похожей на уже существующую, тогда класс новой формы может быть сделан наследником класса существующей формы.
Модальные и немодальные окна
В структуре Windows-приложений применяются модальные и немодальные окна. Окно называется модальным, если нельзя закончить работу в открытом окне до тех пор, пока оно не будет закрыто. Немодальные окна допускают параллельную работу в окнах. Окно становится модальным или немодальный в зависимости от свойств его формы.
Метод Show открывает форму, как немодальные, а метод ShowDialog - как модальную. Часто в структуре Windows-приложений различные формы должны работать с одним объектом, проводя с ним различные операции. Конечно, такая схема реализуется следующим образом:
- объект создается в одной из форм (чаще всего, в главной);
- при создании следующей формы глобальный объект передается конструктору новой формы качестве аргумента;
- одно из свойств новой формы должна представлять ссылку на объект соответствующего класса так, что конструктору останется только связать ссылку с переданным ему объектом.
Указанный порядок действий можно характеризовать как эффективное программирование, поскольку, объект создается только один раз, а различные формы могут его использовать, оперируя исключительно ссылками на него.
Компоненты интерфейса форм Windows-приложений реализуются имеющимися в них элементами управления.
Элементы управления предназначены для отображения информации пользователям и реакции на определенные события. Элементы управления Windows-приложений можно сгруппировать по нескольким функциональным группам.
- Группа командных объектов. Элементы управления Button, LinkLabel, ToolBar реагируют на нажатие активной зоны и инициируют определенное событие. Это наиболее распространенная группа элементов.
- Группа текстовых объектов. Большинство приложений позволяет пользователю вводить текст и, в свою очередь, выводят различную информацию в виде текстовых записей. Элементы TextBox, RichTextBox принимают текст, а элементы Label, StatusBar выводят ее. Для обработки введенного пользователем текста, как правило, следует нажать на один или несколько элементов из группы командных объектов.
- Группа переключателей. Приложение может содержать несколько определенных вариантов исполнения действия или решения задачи. Элементы управления этой группы предоставляют возможность пользователю осуществить выбор. Это одна из самых распространенных групп элементов, в которую входят ComboBox, ListBox, ListView, TreeView и многие другие.
- Группа контейнеров. С элементами этой группы действия приложения практически никогда не связываются, но они имеют большое значение для организации других элементов управления, их систематизации и общего дизайна формы. Как правило, элементы этой группы используются в качестве визуальной платформы для кнопок, текстовых полей, списков. Элементы Panel, GroupBox, TabControl реализуют разделение интерфейса приложения на логические группы, обеспечивая удобство работы.
- Группа графических элементов. Часто Windows-приложение содержит графику: иконки, заставки, встроенные изображения. Для размещения и отображения их на форме используются элементы для работы с графикой: Image List, Picture Box.
Диалоговые окна. Выполняя различные операции с документом (открытие, сохранение, печать, предварительный просмотр) необходимо использовать соответствующие диалоговые окна. Программисту, который применяет современную среду разработки приложений, нет необходимости заниматься созданием окон стандартных процедур, поскольку элементы OpenFileDialog, SaveFile Dialog, ColorDialog, PrintDialog содержат уже готовые операции.
Группа меню. Практически во всех Windows-приложениях присутствует меню, содержащее в себе доступ к функциональным возможностям приложения. Элементы MainMenu, ContextMenu представляют собой готовые формы для внесения заголовков и пунктов меню. Размещать на форме элементы управления можно двумя способами.
- Во-первых: в режиме проектирования использовать графический интерфейс среды разработки для визуального помещения на поверхность формы необходимых элементов. При этом как только на форме появляется новый элемент управления, в тексте класса немедленно появляются соответствующие строки программного кода.
- Во-вторых: в программном режиме писать соответственные строчки кода, что приводит к появлению элементов управления на форме. Следует помнить, что форма - это видимый образ класса Form, а элементы управления, которые находятся на форме - это видимые образы экземпляров классов (объектов), наследников класса Control.
Итак форма с ее элементами управления является прямым отражением программного кода. Каждый вид элементов управления описывается собственным классом. Библиотека FCL содержит большое количество классов, реализующих элементы управления. Все эти классы являются потомками единственного прародителя - класса Object.
Класс Control
Класс Control в иерархии классов занимает довольно высокое положение. Он имеет два важных родительских класса: класс Component, определяющий возможность элементам управления быть компонентами, и класс MarshalByRefObject, предоставляющий возможность передачи элементов управления по сети.
Класс Control определяет важные свойства, методы и события, которые наследуются всеми его потомками. Все классы элементов управления является наследниками класса Control. Класс Form также является одним из потомков класса Control.
Таким образом форма, по сути, это элемент управления со специальными свойствами. Являясь наследником классов ScrollableControl и ContainerControl, форма допускает прокрутку и размещение элементов управления.
Современный инструментарий разработки программных систем, реализованный в Microsoft Visual Studio, предоставляет возможности создавать собственные элементы управления и размещать их на формах вместе со встроенными элементами.
Как пример можно привести технологию ASP .NET. Значительное количество фирм специализируются на создании элементов управления, как одного из видов повторно используемых программных компонентов.