Рисование сложных линий и печать всей формы как снимка экрана

 

Листинг 6.1. Код для рисования прямоугольника.

private void Form1_Paint(object sender, PaintEventArgs e)

{

//Задаем цвет и толщину пера:

Pen myPen1 = new Pen(Color.Black, 3);

//Объявляем объект myRectangle и создаем экземпляр этого объекта:

Rectangle myRectangle = new Rectangle(10, 15, 150, 200);

//Рисуем фигуру:

e.Graphics.DrawRectangle(myPen1, myRectangle);

//Высвобождаем память, выделенную объекту myPen1:

myPen1.Dispose();

}

Листинг 6.2. Код для рисования кривых линий.

private void Form1_Paint(object sender, PaintEventArgs e)

{

//Задаем цвет и толщину перьев:

Pen myPen1 = new Pen(Color.Black, 3);

Pen myPen2 = new Pen(Color.Black, 1);

//Объявляем объекты и создаем экземпляры этих объектов:

Point myPoint1 = new Point(50, 50);

Point myPoint2 = new Point(100, 25);

Point myPoint3 = new Point(200, 5);

Point myPoint4 = new Point(275, 50);

Point myPoint5 = new Point(300, 150);

Point myPoint6 = new Point(350, 200);

Point myPoint7 = new Point(250, 250);

Point[] myCurvePoints =

{

myPoint1,

myPoint2,

myPoint3,

myPoint4,

myPoint5,

myPoint6,

myPoint7

};

//Рисуем линии:

e.Graphics.DrawLines(myPen1, myCurvePoints);

e.Graphics.DrawClosedCurve(myPen2, myCurvePoints);

//Высвобождаем память от перьев myPen1, myPen2:

myPen1.Dispose();

myPen2.Dispose();

}

Листинг 6.3. Метод для фотографирования клиентской области формы.

[System.Runtime.InteropServices.DllImport("gdi32.dll")]

public static extern long BitBlt(IntPtr hdcDest,

int nXDest, int nYDest, int nWidth, int nHeight,

IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);

private Bitmap myMemoryImage;

private void myCaptureScreen()

{

Graphics myGraphics = this.CreateGraphics();

Size s = this.Size;

myMemoryImage = new Bitmap(s.Width, s.Height,

myGraphics);

Graphics myMemoryGraphics =

Graphics.FromImage(myMemoryImage);

IntPtr dc0 = myGraphics.GetHdc();

IntPtr dc1 = myMemoryGraphics.GetHdc();

BitBlt(dc1, 0, 0, this.ClientRectangle.Width,

this.ClientRectangle.Height,

dc0, 0, 0, 13369376);

myGraphics.ReleaseHdc(dc0);

myMemoryGraphics.ReleaseHdc(dc1);

}

Листинг 6.4. Код для рисования изображения.

private void printDocument1_PrintPage(object sender,

System.Drawing.Printing.PrintPageEventArgs e)

{

e.Graphics.DrawImage(myMemoryImage, 0, 0);

}

Теперь дважды щелкаем по кнопке Print (рис. 6.1) в режиме проектирования. Открывается файл Form1.cs с шаблоном, в который записываем сначала одну строку для вызова приведенного выше метода:

myCaptureScreen();

а затем записываем код для кнопки из приведенного выше параграфа “Методика печати изображения на принтере”.

Листинг 6.5. Метод для фотографирования элемента управления PictureBox.

[System.Runtime.InteropServices.DllImport("gdi32.dll")]

public static extern long BitBlt(IntPtr hdcDest,

int nXDest, int nYDest, int nWidth, int nHeight,

IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);

private Bitmap myMemoryImage;

private void myCaptureScreen()

{

Graphics myGraphics = pictureBox1.CreateGraphics();

myMemoryImage = new Bitmap(

pictureBox1.Width,

pictureBox1.Height, myGraphics);

Graphics myMemoryGraphics =

Graphics.FromImage(myMemoryImage);

IntPtr dc0 = myGraphics.GetHdc();

IntPtr dc1 = myMemoryGraphics.GetHdc();

BitBlt(dc1, 0, 0, pictureBox1.ClientRectangle.Width,

pictureBox1.ClientRectangle.Height,

dc0, 0, 0, 13369376);

myGraphics.ReleaseHdc(dc0);

myMemoryGraphics.ReleaseHdc(dc1);

}

Предлагаю ознакомиться с аналогичными статьями: