Чтение онлайн

ЖАНРЫ

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

В этой главе показано, как строить меню верхнего уровня (а также всплывающие меню) и как обрабатывать события меню. Было также выяснено, как можно расширить функциональные возможности типа Form с помощью панелей инструментов и строк состояния. В .NET 2.0 при создании таких элементов пользовательского интерфейса предлагается использовать MenuStrip, ToolStrip и StatusStrip, а не типы MainMenu, ToolBar и StatusBar из .NET 1.x (хотя эти, уже устаревшие типы, тоже поддерживаются). В завершение главы было продемонстрировано, как с помощью средств Windows Forms можно создавать MDI-приложения.

ГЛАВА 20. Визуализация графических данных средствами GDI+

Предыдущая глава предлагала вводное описание процесса построения GUI-приложений с помощью System.Windows.Forms. Целью этой главы является рассмотрение возможностей визуализации графических данных в окне формы (включая как вывод изображений, так и вывод текста различными стилями). Мы начнем с общего рассмотрения пространств

имен, связанных с выводом графических данных, ради события Paint и "всемогущего" объекта Graphics.

Остальная часть этой главы будет посвящена способам манипуляции цветами, шрифтами, геометрическими формами и графическими образами. В этой главе также исследуется ряд программных подходов, связанных с визуализацией графических данных, например, таких как проверка доступа пользователя к непрямоугольным областям экрана, логика перетаскивания объектов и формат ресурсов .NET. И хотя, строго говоря, это не относится к GDI+ непосредственно, при операциях с ресурсами нередко приходится использовать манипуляции графическими данными (что оказывается достаточно важным для того, чтобы представить соответствующий материал здесь).

Замечание. Если вы программируете для Web, то можете подумать, что технологии GDI+ вам не пригодятся. Однако на самом деле эти технологии не ограничиваются только традиционными приложениями – они оказывается исключительно важными и для Web-приложений.

Обзор пространств имен GDI+

Платформа .NET обеспечивает целый набор пространств имен для поддержки визуализации двумерной графики. В дополнение к основным функциональным возможностям разработчика, которые обычно предлагаются графическими пакетами (цвета, шрифты, перья, кисти и т.д.), вы также найдете типы, осуществляющие геометрические трансформации, сглаживание, смешивание палитр и печать документов. Вместе эти пространства имен формируют тот набор возможностей .NET, который мы называем GDI+ (Graphics Device Interface – интерфейс графических устройств, интерфейс GDI) и который является управляемой альтернативой Win32 GDI API (Application Programming Interface – программный интерфейс приложения). В табл. 20.1 предлагаются общие описания базовых пространств имен GDI+.

Таблица 20.1. Базовые пространства имен GDI+

Пространство имен Описание
System.Drawing Базовое пространство имен GDI+, определяющее множество типов для основных операций визуализации (шрифты, перья, основные кисти и т.д.), а также "всемогущий" тип Graphics
System.Drawing.Drawing2D Предлагает типы, используемые для более сложной двумерной/векторной графики (градиентные кисти, стили концов линий для перьев, геометрические трансформации и т.д.)
System.Drawing.Imaging Предлагает типы, обеспечивающие обработку графических изображений (изменение палитры, извлечение метаданных изображения, работа с метафайлами и т.д.)
System.Drawing.Printing Предлагает типы, обеспечивающие отображение графики на печатной странице, непосредственное взаимодействие с принтером и определение полного формата задания печати
System.Drawing.Text Дает возможность управлять коллекциями шрифтов

Замечание. Все пространства имен GDI+ определены в компоновочном блоке System.Drawing.dll. Многие типы проектов Visual Studio 2005 устанавливают ссылку на эту библиотеку программного кода автоматически, но вы можете при необходимости сослаться на System.Drawing.dll вручную, используя диалоговое окно Add References (Добавление ссылок).

Обзор пространства имен System.Drawing

Большинство типов, которые вам придется использовать при создании GDI-приложений, содержится в пространстве имен System.Drawing. Как и следует ожидать, здесь есть классы, представляющие изображения, кисти, перья и шрифты. Кроме того, System.Drawing определяет ряд связанных утилитарных типов, таких как Color (цвет), Point (точка) и Rectangle (прямоугольник). В табл. 20.2 предлагаются описания некоторых базовых типов этого пространства имен.

Утилитарные типы System.Drawing

Многие из методов визуализации, определенные объектом System.Drawing. Graphics, требуют указать позицию или область, в которой требуется отобразить данный элемент. Например, метод DrawString требует, чтобы вы указали позицию, в которой нужно отобразить текстовую строку в производном от Control типе. Метод DrawString является перегруженным, поэтому параметр позиции можно указать как в виде координаты (х, у), так и в виде размеров "бокса", в котором нужно выполнить визуализацию. Другие методы GDI+ могут требовать, чтобы вы

указали ширину и высоту данного элемента или внутренние границы геометрического образа.

Таблица 20.2. Базовые типы пространства имен System.Drawing 

Тип Описание
Bitmap Тип, инкапсулирующий данные изображения (*.bmp или какого-то другого)
Brush Brushes SolidBrush SystemBrushes TextureBrush Объекты Brush используются для заполнения внутренних областей графических форм, например, таких как прямоугольники, эллипсы и многоугольники
BufferedGraphics Новый тип .NET 2.0, обеспечивающий графический буфер для двойной буферизации, которая используется для уменьшения или полного исключения влияния эффекта мелькания, возникающего при перерисовке изображений
Color SystemColors Типы Color и SystemColors определяет ряд статических свойств, доступных только для чтения и используемых для получения нужного цвета при использовании различных перьев и кистей
Font FontFamily Тип Font инкапсулирует характеристики данного шрифта (название, плотность, начертание, размер и т.д.). FontFamily предлагает абстракцию для группы шрифтов, имеющих аналогичный дизайн, но определенные вариации стиля
Graphics Представляет реальную поверхность нанесения изображения, а также предлагает ряд методов для визуализации текста, изображений и геометрических шаблонов
Icon SystemIcons Представляют пользовательские пиктограммы, а также набор стандартных пиктограмм, предлагаемых системой
Image ImageAnimator Тип Image – это абстрактный базовый класс, необходимый для поддержки функциональных возможностей типов Bitmap, Icon и Cursor. Тип ImageAnimator обеспечивает возможность выполнения цикла по набору типов Image из некоторого заданного интервала
Pen Pens SystemPens Pens – это объекты, используемые для построения линий и кривых. Тип Pen определяет ряд статических свойств, возвращающих новый объект Pen заданного цвета
Point PointF Структуры, представляющие отображение координаты (x, y) в соответствующее целое значение или значение с плавающей точкой, соответственно
Rectangle RectangleF Структуры, представляющие размеры прямоугольника (снова с отображением в соответствующее целое значение или значение с плавающей точкой)
Size SizeF Структуры, представляющие заданные высоту/ширину (снова с отображением в соответствующее целое значение или значение с плавающей точкой).
StringFormat Тип, используемый для инкапсуляции различных характеристик размещения текста (выравнивание, промежутки между строками и т.д.)
Region Тип, описывающий геометрический образ, скомпонованный из прямоугольников и траекторий

Для указания такой информации пространство имен System.Drawing определяет типы Point, Rectangle, Region и Size. Очевидно, что тип Point (точка) представляет координату (x, у). Типы Rectangle (прямоугольник) содержат пару точек, представляющих левый верхний и нижний правый угол прямоугольной области. Типы Size (размер) подобны Rectangle, но эта структура представляет конкретные размеры, используя длину и ширину. Наконец, типы Region (регион) предлагают способ представления непрямоугольных областей.

Члены-переменные, используемые типами Point, Rectangle, Region и Size, внутренне представлены целочисленными данными. Если вам потребуется более "тонкая" детализация, можете использовать, соответственно, типы PointF, RectangleF и SizeF, которые (как вы можете догадаться) отображаются в соответствующие значения с плавающим разделителем. Но, независимо от внутреннего представления, все эти типы имеют аналогичные множества членов, включая ряд перегруженных операторов.

Тип Point(F)

Первым утилитарным типом, о котором вам следует знать, является тип System.Drawing.Point(F). В отличие от иллюстративных типов Point, создававшихся в предыдущих главах, тип Point(F) GDI+ поддерживает целый ряд очень полезных членов, включая следующие:

• +, -, ==, != – перегруженные варианты различных C#-операций;

• X, Y – обеспечивают доступ к соответствующим внутренним значениям (х, у) типа Point;

• IsEmpty – возвращает true (истина), если x и у установлены равными 0.

Поделиться с друзьями: