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

ЖАНРЫ

Программирование КПК и смартфонов на .NET Compact Framework

Климов Александр Петрович

Шрифт:

new Point((int)xAngle[5], (int)yAngle[5]),

new Point((int)xAngle[6], (int)yAngle[6]),

new Point((int)xAngle[7], (int)yAngle[7]),

new Point((int)xAngle[8], (int)yAngle[8]),

new Point((int)xAngle[9], (int)yAngle[9]),

new Point((int)xAngle[10], (int)yAngle[10]),

new Point((int)xAngle[11], (int)yAngle[11])

 };

 g.DrawPolygon(pen, anglePoints);

}

private void Form1_Paint(object sender, PaintEventArgs e) {

 //
Выводим несколько секторов на экран

 DrawPie(e.Graphics, new Pen(Color.Red), 130, 165, 100, 100, 0, 45);

 FillPie(e.Graphics, new SolidBrush(Color.Green),

120, 160, 100, 100, 46, 90);

 FillPie(e.Graphics, new SolidBrush(Color.Yellow),

120, 160, 100, 100, 91, 120);

 FillPie(e.Graphics, new SolidBrush(Color.Blue),

120, 160, 100, 100, 121, 260);

 FillPie(e.Graphics, new SolidBrush(Color.Red),

120, 160, 100, 100, 261, 360);

}

Результат работы этой программы показан на рис. 6.2.

Рис. 6.2. Создание секторов

Создание фонового рисунка для формы

К сожалению, .NET Compact Framework не поддерживает свойство

BackgroundImage
, которое создает фоновый рисунок для формы. Но каждый программист может восполнить данный пробел, переопределяя метод
OnPaint
.

Нужно создать новый проект и разместить на форме какой-нибудь элемент управления, например кнопку. Кнопка не будет выполнять никаких функций. Она потребуется лишь для демонстрации технологии. Также надо добавить в проект изображение, которое будет использоваться в качестве фона для формы. В нашем примере картинка будет внедрена в программу как ресурс, хотя можно загрузить ее из обычного графического файла. Чтобы все работало так, как запланировано, необходимо переопределить метод

OnPaint
. Новый код метода приведен в листинге 6.16.

Листинг 6.16

protected override void OnPaint(PaintEventArgs e) {

 // получим картинку из ресурсов Bitmap

 backgroundImage = new Bitmap(Assembly.GetExecutingAssembly.

GetManifestResourceStream("BackgroundImageCS.sochicat.jpg"));

 e.Graphics.DrawImage(backgroundImage, this.ClientRectangle,

new Rectangle(0, 0, backgroundImage.Width, backgroundImage.Height),

 GraphicsUnit.Pixel);

}

После запуска программы можно будет увидеть, что форма имеет фоновый рисунок, а кнопка расположена поверх фона (рис. 6.3).

Рис. 6.3. Заполнение фона формы своим рисунком

Копирование рисунка

Библиотека .NET Compact Framework 1.0 не поддерживает метод

System.Drawing.Image.Clone
, позволяющий создать точную копию картинки. Это ограничение легко обходится с помощью создания собственных методов. Кроме того, можно расширить возможности метода и добавить функциональность, позволяющую копировать часть картинки. Соответствующий код приведен в
листинге 6.17.

Листинг 6.17

// Копируем всю картинку

protected Bitmap CopyBitmap(Bitmap source) {

 return new Bitmap(source);

}

// Копируем часть картинки

protected Bitmap CopyBitmap(Bitmap source, Rectangle part) {

 Bitmap bmp = new Bitmap(part.Width, part.Height);

 Graphics g = Graphics.FromImage(bmp);

 g.DrawImage(source, 0, 0, part, GraphicsUnit.Pixel);

 g.Dispose;

 return bmp;

}

private void button1_Click(object sender, EventArgs e) {

 Graphics g = CreateGraphics;

 Bitmap myBMP = new Bitmap(@"\windows\banner.gif");

 // Половина ширины картинки

 int left = myBMP.Size.Width / 2;

 // Копируем всю картинку Bitmap

 clone = CopyBitmap(myBMP);

 // копируем левую часть картинки

 Bitmap part =

CopyBitmap(myBMP, new Rectangle(0, 0, left, myBMP.Size.Height));

 // Выводим три картинки по вертикали:

 // источник, копию и копию левой части

 int y = 10;

 // картинка-источник

 g.DrawImage(myBMP, 10, y);

 y += myBMP.Height + 10;

 // картинка-копия

 g.DrawImage(clone, 10, y);

 y += clone.Height + 10;

 // копия левой части картинки

 g.DrawImage(part, 10, y);

 y += part.Height + 10;

 g.Dispose;

}

private void button2_Click(object sender, EventArgs e) {

 Graphics g = CreateGraphics;

 Bitmap myBMP = new Bitmap(@"\windows\banner.gif");

 g.Clear(Color.White);

 int left = myBMP.Size.Width / 2; // Копия картинки

 Bitmap clone = (Bitmap)myBMP.Clone;

 int y = 10;

 g.DrawImage(myBMP, 10, y);

 y += myBMP.Height + 10;

 g.DrawImage(clone, 10, y);

 y += clone.Height + 10;

 g.Dispose;

}

В этом примере создаются две перегруженные версии метода

CopyImage
. При помощи этого метода можно копировать картинку или ее часть. Для сравнения в примере было показано, как можно скопировать картинку с помощью метода
Clone
, доступного в .NET Compact Framework 2.0. Результат работы соответствующего приложения показан на рис. 6.4.

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