Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный_практикум.doc
Скачиваний:
74
Добавлен:
15.11.2019
Размер:
45.35 Mб
Скачать

4. Модификация приложения Windows Forms: вкладка «Просто фон!»

Первая вкладка TabControl будет показана первой при старте приложения. На неё просто необходимо установить что-нибудь простое.

Для начала изменим текст самой вкладки. Выделим элемент управления и перейдём к свойствам (панель Свойства) элемента. Нам нужно свойство TabPages:

Жмём «...» и открываем окно редактирования вкладок:

Рис. 4. 1. Редактор коллекции TabPage: меняем Text и Cursor

Для вкладки tabPage1 (имя не будем менять), изменим свойства:

TabPage:

Text:

Просто фон!

Cursor:

No

В качестве фона вкладки будет выбрано некое изображение. Пусть это будет изображение с именем Background_Image.jpg (использованное в данной работе изображение можно получить в ZIP-архиве по ссылке в конец этого материала). Для добавления выполним действия: Проект -> Существующий элемент... (Shift+Alt+A), в открывшемся окне находим изображение и жмём Добавить.

Теперь приступаем к коду вкладки. Для начальной вкладки tabPage1 проинициализируем событие Paint (панель свойств, вкладка События):

Код события такой:

private void tabPage1_Paint(object sender, PaintEventArgs e)

{

// При создании вкладки и её прорисовки, вызываем метод DoPaint

// Используем аргумент e для получение параметров рисования (устройста и прямоугольной области)

DoPaint(e.Graphics, e.ClipRectangle);

}

Добавим и сам метод DoPaint в код под событие Paint:

protected void DoPaint(Graphics g, Rectangle clipBox)

{

RectangleF bounds = clipBox;

String welcome = "Расширенная работа с GDI+ (C#) :: Вкладка \"Просто фон\"";

Bitmap bg = new Bitmap("/Background_Image.gif"); // Абсолютный путь до изображения

g.DrawImage(bg, bounds); // Рисуем и растягиваем изображение на весь фон вкладки

// Создаём градентную заливку для текста

LinearGradientBrush brush = new LinearGradientBrush(bounds,

Color.FromArgb(130, 255, 0, 0), Color.FromArgb(255, 0, 0, 255),

LinearGradientMode.BackwardDiagonal);

// Создаём форматирование текста и помещаем его в центре вкладки (по вертикали и горизонтали)

StringFormat format = new StringFormat();

format.Alignment = StringAlignment.Center;

format.LineAlignment = StringAlignment.Center;

// Задаём параметры шрифта

Font font = new Font("Verdana", 48, FontStyle.Bold);

g.DrawString(welcome, font, brush, bounds, format);

}

В самом начале файла формы LWP19Main.cs добавим следующую строчку:

using System.Drawing.Drawing2D;

Всё предельно просто. Комментарии расставлены. Собственно этим кодом был реализован простейший пример работы с GDI+.

Откомпилируем и запустим приложение (Debug). Увидим, что текст отрисовывается без сглаживания. Это связано с тем, что в Windows Forms по умолчанию отключается улучшенный режим отрисовки шрифтов. Включить можно, например, так (размещать код перед кодом рисования объекта):

g.SmoothingMode = SmoothingMode.AntiAlias;

В объекте Graphics имеется также соответствующее свойство InterpolationMode. Выигрыш в качестве в данном случае приводит к проигрышу в скорости, поэтому при использовании режима с наивысшим качеством InterpolationModeHighQualityBicubic медленные компьютеры могут выводить изображения больших размеров в течение нескольких секунд (речь идет об экранном выводе, то есть умеренно больших, так как бикубическая интерполяция изображений полиграфического разрешения может длиться минутами и на самых современных компьютерах)! Но только этот метод способен адекватно отображать, например картинку при уменьшении её до 25 процентов (и менее) от оригинала. Этот режим очень поможет различным автоматическим генераторам иконок (thumbnail) изображений в ASP.NET.

На качество (и скорость) вывода растров также влияют некоторые другие установки объектов Graphics. Перечислим их:

Метод

Назначение

SmoothingMode

Как уже говорилось, позволяет указать метод устранения ступенчатости (Anti Aliasing) при выводе примитивов – линий и геометрических фигур.

CompositingMode

Устанавливает или отключает учет прозрачности при наложении растровых изображений.

CompositingQuality

Управляет качеством расчета цветовых компонентов при наложении растров.

PixelOffsetMode

Задает метод учета смещения пикселов при интерполяции. Грубо говоря, определяет, являются ли координаты пикселов (или их центров) целыми числами при расчетах.

RenderingOrigin

Устанавливает позицию начальной точки при псевдосмешении (dithering) цветов в 8- и 16-битных режимах.