Рисование на форме - C# (201899)
Формулировка задачи:
Есть ли где-то краткое руководство по рисованию геометрических фигур на форме? Или какой-нибудь сайт полезный. Киньте ссылку, пожалуйста.
Решение задачи: «Рисование на форме»
textual
Листинг программы
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
BufferedGraphics _bufferedGraphics;
Pen _pen;
Rectangle _rectHouse; //Прямоугольник дома
//Rectangle _rectChimney; //Прямоугольник дымовой трубы
Point[] _pointsHousetop; //Крыша дома
public Form1()
{
InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;
Size = new Size(700, 600);
InitializeGraphics();
InitializeCoordinates();
_pen = new Pen(Color.Black, 3);
Paint += new PaintEventHandler(Form1_Paint);
Resize +=new EventHandler(Form1_Resize);
}
private void InitializeCoordinates()
{
const int widthHouse = 140;
const int heightHouse = 80;
_rectHouse = new Rectangle(ClientSize.Width / 2 - widthHouse / 2, ClientSize.Height / 2 - heightHouse / 2, widthHouse, heightHouse);
const int underhang = 8; //отступ влево и вправо нижних углов треугольника крыши
const int heightHousetop = 45; //высота треугольника крыши
if (_pointsHousetop == null)
_pointsHousetop = new Point[5];
_pointsHousetop[0] = new Point(_rectHouse.X - underhang, _rectHouse.Y);
_pointsHousetop[1] = new Point(_rectHouse.X + _rectHouse.Width / 2, _rectHouse.Y - heightHousetop);
_pointsHousetop[2] = new Point(_rectHouse.Right + underhang, _rectHouse.Y);
_pointsHousetop[3] = new Point(_pointsHousetop[0].X, _pointsHousetop[0].Y);
_pointsHousetop[4] = new Point(_pointsHousetop[1].X, _pointsHousetop[1].Y); //снова получаем координату верхней точки треугольника крыши, чтобы левый нижний угол был острый при отрисовке
}
private void InitializeGraphics()
{
_bufferedGraphics = BufferedGraphicsManager.Current.Allocate(CreateGraphics(), ClientRectangle);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
DrawToBuffer();
}
private void Form1_Resize(object sender, EventArgs e)
{
InitializeCoordinates();
InitializeGraphics();
Invalidate();
}
private void DrawToBuffer()
{
_bufferedGraphics.Graphics.Clear(BackColor);
_bufferedGraphics.Graphics.DrawRectangle(_pen, _rectHouse);
_bufferedGraphics.Graphics.DrawLines(_pen, _pointsHousetop);
_bufferedGraphics.Render();
}
}
}