Напомним, что компания Microsoft определяет .NET Framework как новую вычислительную платформу, целью которой является упрощение разработки приложений, способных функционировать в распределенной среде Internet. В MSDN вы можете встретить и другое определение, которое на мой взгляд более точно отражает сущность дела. .NET Framework — это многоязыковая среда разработки приложений, которая включает в себя библиотеку классов, интерфейсов и типов данных, общую для всех поддерживаемых платформой языков программирования.
В документации, сопровождающей различные среды разработки, существует множество версий рисующих приложений. Например смотри документацию Borland C++ 5.2, Visual C++ 6.0, Visual C++ 7.0, Open Inventor. Рисующее приложение уже давно стало испытательным образцом, на котором демонстрируюnся новые решения старых проблем. Есть такой пример и в Studio.NET. Смотрите папку Scribble, расположенную по адресу: “Samples\VCSharp\General”. Здесь вы найдете коды примера без текстового описания. Подробное описание Scribble, а точнее, самоучитель (tutorial) есть только в версии C++. Он использует библиотеку MFC. Наша разработка основана на версии C# того же примера. Она радикальным образом отличается от версии MFC, так как использует библиотеку классов .NET Framework. Я немного модифицировал этот пример для того, чтобы полнее раскрыть особенности использования языка C# и возможности библиотеки .NET Framework Classes.
Начнем с создания заготовки Windows-приложения. Выберем маршрут, начинающийся на вкладке Projects страницы Start Page (если ее нет, дайте команду Help4Show Start Page). Нажмите кнопку New Project, выберите тип проекта Visual C# Projects, шаблон Windows Application, имя проекта Draw и нажмите OK. Начальный капкас приложения включает в себя оконную форму главного окна. При создании любой новой оконной формы активным становится окно Design того класса, который управляет этой формой. Чтобы увидеть коды этого же класса, надо выбрать команду View Code из контекстного меню формы или дать команду View4Code (F7). Обратное переключение удобно делать с помощью комбинации Shift+F7. В окно с кодами классов приложения можно перейти и другим способом — выбрать класс или его метод в окне Class View.
В стартовой заготовке проекта (см. коды класса главного окна) вы увидите пространство имен (namespace) Draw, в котором определен единственный класс Form1. С помощью команды Edit4Find and Replace4Replace (Ctrl+H) переименуйте этот класс на MainWindow. С помощью команды Rename контекстного меню переименуйте также и файл (вместо Form1.cs задайте MainWindow.cs). Затем переключитесь в окно MainWindow.cs (кодов класса), найдите в нем функцию Main и обратите внимание на строку:
Application.Run(new MainWindow());
Здесь, как вы догадались, запускается цикл обработки сообщений, составляющий основу любого Windows-приложения. Это делает класс Application библиотеки .NET Framework. Он определен в пространстве имен System.Windows.Forms, которое содержит все необходимое для разработки полноценных Windows-приложений. Класс Application имеет спецификатор sealed, что означает невозможность наследования, то есть создания своих собственных версий трактовки Windows-приложений.
В .NET Framework классы могут быть абстрактными (abstract) и запечатанными (sealed). Функциональность абстрактных классов обязательно должна быть реализована производными классами, в то время как sealed-классы вовсе запрещают наследование. Вместо этого они предоставляют статические методы и свойства.
Класс Application содержит только статические методы — именно поэтому мы не видим в функции Main объекта этого класса. Методы класса приложений позволяют запускать и останавливать процессы и потоки приложения. Интересным свойством класса мне кажется то, что он позволяет поймать и отфильтровать сообщения до того, как они переданы элементу управления или оконной форме (см. справку по методу AddMessageFilter).
Как вы видите, в качестве параметра методу Run класса Application передается адрес главного окна. Выражаясь более точно, это адрес динамически созданного объекта класса MainWindow, производного от класса Form, определенного в том же пространстве имен System.Windows.Forms. Рассмотрите коды класса MainWindow. Чтобы осмыслить их, необходимо знать, что платформа .NET Framework является прежде всего библиотекой компонентов. Компоненты размещаются в контейнере. Контейнер компонентов — это либо объект класса Container, либо объект какого-то другого пользовательского класса, реализующего интерфейс IContainer. Класс System.ComponentModel.Container реализует упомянутый интерфейс стандартным образом. Любой контейнер реализуюет функциональность динамической коллекции объектов. Контейнер компонентов управляет коллекцией и, к тому же, помогает взаимодействовать с событиями операционной системы.
Оконная форма является контейнером компонентов и обычных элементов управления (controls). Поэтому класс MainWindow содержит стандартный набор методов и контейнер components. Методы класса Container управляют поведением компонетов. Пространство System.ComponentModel содержит довольно много других классов, реализующих поведение компонентов как на этапе выполнения, так и на этапе разработки (design-time). Например, вы можете добавлять и удалять компоненты из контейнера. Логика управления контейнером иллюстрируется следующим примером.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.