Программирование >>  Программирование с использованием ajax 

1 ... 341 342 343 [ 344 ] 345 346 347 ... 396


На этом этапе можно создать диалоговое окно выбора цвета, которое можно использовать для выяснения взаимосвязи между цветами, определенными посредством красной, зеленой и синей составляющей, и цветами, определенными посредством оттенка, насыщенности и яркости. Для этого выполните перечисленные ниже действия.

1. В новом Windows-приложении перетащите элемент управления ColorDialog в свою форму и после вызова метода InitializeComponent () добавьте вызов метода this.colorDialogl.ShowDiaiog():

public Forml() {

InitializeComponent ();

this.colorDialogl.ShowDiaiog();

При помещении формы в приложение диалоговое окно выбора цвета также будет помещено в него.

2. Запустите приложение и щелкните на кнопке Define Custom Colors (Определить пользовательские цвета). Откроется диалоговое окно, в котором с помощью мыши можно выбирать цвета и видеть RGB-значения выбранного цвета. Диалоговое окно отображает также значения оттенка, насыщенности и светлоты цвета (светлота соответствует яркости). Можно также непосредственно ввести RGB-значения и наблюдать результирующий цвет.

В GDI+ цвета имеют четвертый компонент - альфа-канал. Используя этот компонент, можно устанавливать прозрачность цвета, что позволяет создавать эффекты усиления/ ослабления, подобные используемым в меню Windows 2000 и Windows XP/Vista. Описани£ применения альфа-компонента выходит за рамки настоящей книги.

Рисование линий с использованием класса Реп

Первый пример, который мы рассмотрим - рисование линий. В следующем практическом занятии мы нарисуем линии с использованием класса Реп (перо), который позволяет определять цвет, толщину и стмь линии, отображаемой кодом. Свойства цвета и толщины очевидны, а стиль линии показывает, является ли линия сплошной ми состоит из штрихов и точек. Класс Реп определен в пространстве имен System. Drawing.

ilP !!!!!!.®?!? Т**Т1спользов класса Pen

Чтобы нарисовать в окне ряд линий с применением класса Реп, выполните следующие действия.

1. Создайте новое Windows-приложение по имени DrawingLines в каталоге С:\

BegVCSharp\Chapter33.

2. В тело кода объекта Forml введите следующий код:

protected override void OnPaint(PaintEventArgs e) {

Graphics g = e.Graphics;

using (Pen blackPen = new Pen (Color.Black, 1))



if (ClientRectangle.Height/10 > 0) {

for (int у = 0; у < ClientRectangle.Height; у += ClientRectangle.Height / 10)

g.DrawLine(blackPen, newPoint(0, 0),

new Point(ClientRectangle.Width, y) ) ;

3. Нажмите клавишу <F5>, чтобы скомпилировать и запустить код. В результате будет создано окно, показанное на рис. 33.9.


Рис. 33.9. Рисовани£ линий с использовани£м класса Реп

Описание полученных результатов

Класс Graphics был представлен ранее в этой главе. Первое, что мы выполняем в методе OnPaint () - получение объекта Graphics из параметра PaintEventArgs:

Graphics g = е.Graphics;

Поскольку мы передаем ссылку на объект Graphics и не создаем его, нам не нужно (и не следует) вручную вызывать для него метод Dispose (). Однако поскольку в этом примере применяется объект Реп, который теоретически может потреблять много ресурсов, остальная часть кода помещена в блок using, как было описано ранее, что обеспечит уничтожение объекта, как только это станет возможным.

При создании пера конструктору передается цвет и ширина пера. В этом примере цвет является черным, а ширина равной единице. Строка кода, создающего перо, выглядит следующим образом:

using (Pen ЫаскРеп = new Pen (Color .Black, 1))

Каждое окно, в котором можно выполнять рисование, имеет клиентскую область, представляющую собой прямоугольник, который существует внутри границы и точно определяет область, где можно выполнять рисование. Клиентскую область можно получить из общедоступного, предназначенного только для чтения свойства ClientRectangle формы (наследуемой от класса Control). Оно содержит размеры (т.е. ширину и высоту) клиентской области окна, в котором выполняется рисование.



Следующий код создает цикл от нуля до высоты клиентской области (заданной свойством ClientRectangle.Height) с шагом 10. Обратите внимание, что цикл начинается с проверки того, что значение ClientRectangle. Height/10 больше нуля - в противном случае цикл выполнялся бы бесконечно, если бы размер формы был меньше определенной высоты. (Поскольку значение ClientRectangle. Height/10 представляет собой приращение цикла, если оно равно нулю, цикл будет выполняться бесконечно.)

if (ClientRectangle.Height/10 > 0) {

for (int у = 0; у < ClientRectangle.Height; у += ClientRectangle.Height / 10)

Теперь можно нарисовать линии - при рисовании каждой линии мы передаем только что созданный объект Реп вместе с начальной и конечной точками линии:

д. DrawLine (ЫаскРеп, newPoint(0, 0),

new Point(ClientRectangle.Width, у));

Для объектов Pen всегда вызывайте метод Dispose ().

Как и при использовании объектов Graphics, для объектов Реп важно либо вызывать метод Dispose () по завершении работы с ними, либо использовать блок using. В противном случае приложение может истощать ресурсы Windows.

В приведенном примере мы создали объект Реп, но существует и более простой способ его получения. Класс Pens содержит свойства для получения около 150 перьев - по одному для каждого из упомянутых предварительно определенных цветов. Следующая версия примера работает идентично предыдущей, но вместо создания объекта Реп, мы получаем его из класса Pens:

protected override void OnPaint(PaintEventArgs e) {

if (ClientRectangle.Height/10 > 0) {

for (int у = 0; у < ClientRectangle.Height; у += ClientRectangle.Height / 10)

e.Graphics.DrawLine(Pens.Black , new Point(0, 0) ,

new Point (ClientRectangle. Width, y)) ;

В данном случае мы не создавали объекта Реп, поэтому нет нужды вызывать метод Dispose О.

Класс Реп предоставляет много других функциональных возможностей. Можно было бы создать перо для рисования штриховой линии или же перо, толщина которого больше одного пикселя. Свойство Alignment класса Реп позволяет определять, должно ли перо отображаться слева или справа (либо выше или ниже) указанной линии. Свойства StartCap и EndCap позволяют задавать стрелку, ромб, квадрат или закругление в качестве окончания линии. Свойства Customs tar tCap и CustomEndCap позволяют даже создавать нестандартные формы начала и окончания линия. После ознакомления с изображениями вы научитесь указывать объект Brush с помощью объекта Реп, чтобы можно было рисовать линии, используя растровое изображение, а не чистый цвет.



1 ... 341 342 343 [ 344 ] 345 346 347 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика