///height - Высота

///startAngle - Значение начального угла

///endAngle - Значение конечного угла

///</summary>

private void DrawPie(Graphics g, Pen pen, int x, int y,

 int width, int height, double startAngle, double endAngle) {

 double[] xAngle = new double[12];

 double[] yAngle = new double[12];

 double angleIncrement = (endAngle - startAngle) / 10;

 double angle = startAngle;

 for (int i = 0; i <= 10; i++) {

  xAngle[i] = x + (Math.Cos(angle * (Math.PI / 180)) * (width /2));

  yAngle[i] = y + (Math.Sin(angle * (Math.PI / 180)) * (height / 2));

  angle += angleIncrement;

 }

 xAngle[11] = x + (Math.Cos(endAngle * (Math.PI / 180)) * (width / 2));

 yAngle[11] = y + (Math.Sin(endAngle * (Math.PI / 180)) * (height /2));

 Point[] anglePoints = {

  new Point(x, y),

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

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

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

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

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

  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) {

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату