Незакрашенный прямоугольник


Метод DrawRectangle позволяет рисовать прямоугольники, заданные координатами верхнего левого угла, а также шириной и высотой.

 

public void DrawRectangle (Pen, Rectangle);

public void DrawRectangle (Pen, int, int, int, int);

public void DrawRectangle (Pen, float, float, float, float);

 

Класс Rectangle имеет свойства:

X и Y,

Width и Height.

 

Набор незакрашенных прямоугольников

 

public void DrawRectangles(Pen, Rectangle[]);

public void DrawRectangles(Pen, RectangleF[]);

 

Незакрашенный многоугольник

 

public void DrawPolygon (Pen, Point []) ;

public void DrawPolygon (Pen, PointF[]);

 

Незакрашенный эллипс

Эллипс вписывается в прямоугольник.

 

public void DrawEllipse (Pen, Rectangle);

public void DrawEllipse (Pen, RectangleF) ;

public void DrawEllipse (Pen, int, int, int, int);

public void DrawEllipse (Pen, float, float, float, float);

 

Сегмент эллипса

 

public void DrawArc (Pen, Rectangle, float, float);

public void DrawArc (Pen, RectangleF, float, float);

public void DrawArc (Pen, int, int, int, int, int, int);

public void DrawArc (Pen, float, float, float, float, float, float);

 

Незакрашенный замкнутый сегмент эллипса

 

public void DrawPie (Pen, Rectangle, float, float);

public void DrawPie (Pen, RectangleF, float, float);

public void DrawPie (Pen, int, int, int, int, int, int);

public void DrawPie (Pen, float, float, float, float, float, float);

 

Кривые Безье

Кривая проходит через 4 точки: нач., кон. и 2 управл.

 

public void DrawBezier (Pen, Point, Point, Point, Point);

 

Еще 4 метода.

Канонические сплайны

Кривая проходит через все точки.

 

public void DrawCurve (Pen, Point []) ;

 

Еще несколько методов.

 

Закрашенные фигуры

 

Префикс Fill:

Метод Описание
FillRectangle Рисование закрашенного прямоугольника
FillRectangles Рисование множества закрашенных многоугольников
FillPolygon Рисование закрашенного многоугольника
FillEllipse Рисование закрашенного эллипса
FillPie Рисование закрашенного сегмента эллипса
FillClosedCurve Рисование закрашенного сплайна
FillRegion Рисование закрашенной области типа Region

 

Вместо пера используется кисть:

 

Brush br = Brushes.Red;

g.FillRectangle (br, e.X, e.Y, 4, 4);

 

Ресурсы приложения

Приложение Microsoft Windows может хранить в виде ресурсов текстовые строки, значки, курсоры, графические изображения, меню, диалоговые окна, произвольные мас­сивы данных и т. д.

Физически ресурсы находятся внутри ехе-файла приложения.

Они могут загружаться в оперативную память автоматически при запуске приложения или по запросу приложения (явному или неявному).

В приложениях Microsoft .NET Framework тоже используется концепция pecypcoв. В частности, ресурсы таких приложений могут содержать значки и графические изображения.

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

 

Методы Drawlcon – рисование значка:

· С растяжением/сжатием

public void Drawlcon (Icon, Rectangle) ;

· Без растяжения/сжатия

public void Drawlcon (Icon, int, int) ;

· Без растяжения/сжатия. Значок обрезается.

public void DrawIconUnstretched(Icon, rect);

 

Пример.

1. Добавьте в проект файл со значком.

2. Установите у этого файла свойство Build Action, равное Embedded Resource (встраиваемый ресурс).

3. Создайте обработчик события Form1_MouseDown.

Поэкспериментируйте с размерами области отображения.

 

Rectangle rect;

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

Graphics g = Graphics.FromHwnd(Handle);

 

/* Создать объект-иконку. Конструктору передается:

1) местоположение иконки в виде метода

GetType() - ссылка на объект-сборку

2) имя иконки. */

Icon myIcon = new Icon(GetType(), "myIcon.ico");

 

// нарисовать иконку

rect.X = e.X; rect.Y = e.Y; rect.Width = 50; rect.Height = 50;

 

//g.DrawIcon(myIcon, rect);

 

// нарисовать иконку без растяжения фиксированного размера

g.DrawIcon(myIcon, e.X+100, e.Y+100);

 

g.DrawIconUnstretched(myIcon, rect); // Как есть

 

}

 

Пример (для продвинутых).

В следующем примере показано, как, используя разные события мыши, изобразить путь указателя мыши на панеле.

Для каждого из происходящих событий MouseMove и MouseDown в GraphicsPath добавляется сегмент линии.

Чтобы обновлять рисунок, при каждом событии MouseDown или MouseUp для Panel вызывается метод Invalidate.

Кроме того, в случае события MouseWheel (вил) (колесо) графический путь прокручивается вверх или вниз.

На экране также отображаются дополнительные события мыши, такие как MouseHover (зависание).

Кроме того, отображаются и дополнительные сведения о мыши, содержащиеся в классе SystemInformation.

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

public partial class Form1 : Form

{

public Form1()

{

mousePath = new System.Drawing.Drawing2D.GraphicsPath();

InitializeComponent();

label2.Text = "SystemInformation.DoubleClickSize: " +

SystemInformation.DoubleClickSize.ToString();

label3.Text = "SystemInformation.DoubleClickTime: " +

SystemInformation.DoubleClickTime.ToString();

label4.Text = "SystemInformation.MousePresent: " +

SystemInformation.MousePresent.ToString();

label5.Text = "SystemInformation.MouseButtons: " +

SystemInformation.MouseButtons.ToString();

label6.Text = "SystemInformation.MouseButtonsSwapped: " +

SystemInformation.MouseButtonsSwapped.ToString();

label7.Text = "SystemInformation.MouseWheelPresent: " +

SystemInformation.MouseWheelPresent.ToString();

label8.Text = "SystemInformation.MouseWheelScrollLines: " +

SystemInformation.MouseWheelScrollLines.ToString();

label9.Text = "SystemInformation.NativeMouseWheelSupport: " +

SystemInformation.NativeMouseWheelSupport.ToString();

}

 

// GraphicsPath представляет последовательность соединенных линий и кривых.

private System.Drawing.Drawing2D.GraphicsPath mousePath;

private int fontSize = 20;

 

 

private void panel1_MouseDown(object sender, MouseEventArgs e)

{

// Update the mouse path with the mouse information

Point mouseDownLocation = new Point(e.X, e.Y);

 

string eventString = null;

switch (e.Button)

{

case MouseButtons.Left:

eventString = "L";

break;

case MouseButtons.Right:

eventString = "R";

break;

case MouseButtons.Middle:

eventString = "M";

break;

case MouseButtons.XButton1:

eventString = "X1";

break;

case MouseButtons.XButton2:

eventString = "X2";

break;

case MouseButtons.None:

default:

break;

}

 

if (eventString != null)

{

mousePath.AddString(eventString, FontFamily.GenericSerif,

(int)FontStyle.Bold, fontSize, mouseDownLocation,

StringFormat.GenericDefault);

}

else

{

mousePath.AddLine(mouseDownLocation, mouseDownLocation);

}

panel1.Focus();

panel1.Invalidate();

}

 

private void panel1_MouseEnter(object sender, EventArgs e)

{

// Update the mouse event label to indicate the MouseEnter event occurred.

label1.Text = sender.GetType().ToString() + ": MouseEnter";

}

 

private void panel1_MouseHover(object sender, EventArgs e)

{

// Update the mouse event label to indicate the MouseHover event occurred.

label1.Text = sender.GetType().ToString() + ": MouseHover";

}

 

private void panel1_MouseLeave(object sender, EventArgs e)

{

// Update the mouse event label to indicate the MouseLeave event occurred.

label1.Text = sender.GetType().ToString() + ": MouseLeave";

}

 

private void panel1_MouseMove(object sender, MouseEventArgs e)

{

// Update the mouse path that is drawn onto the Panel.

int mouseX = e.X;

int mouseY = e.Y;

 

mousePath.AddLine(mouseX, mouseY, mouseX, mouseY);

}

 

private void panel1_MouseUp(object sender, MouseEventArgs e)

{

Point mouseUpLocation = new System.Drawing.Point(e.X, e.Y);

 

// Show the number of clicks in the path graphic.

int numberOfClicks = e.Clicks;

mousePath.AddString(" " + numberOfClicks.ToString(),

FontFamily.GenericSerif, (int)FontStyle.Bold,

fontSize, mouseUpLocation, StringFormat.GenericDefault);

panel1.Invalidate();

}

 

private void panel1_Paint (object sender, PaintEventArgs e)

{

// Perform the painting of the Panel.

e.Graphics.DrawPath(System.Drawing.Pens.DarkRed, mousePath);

}

 

private void clearButton_Click (object sender, EventArgs e)

{

// Clear the Panel display.

mousePath.Dispose();

mousePath = new System.Drawing.Drawing2D.GraphicsPath();

panel1.Invalidate();

}

 

private void panel1_MouseWheel (object sender,

System.Windows.Forms.MouseEventArgs e)

{

// Update the drawing based upon the mouse wheel scrolling.

 

int numberOfTextLinesToMove = e.Delta *

SystemInformation.MouseWheelScrollLines / 120;

int numberOfPixelsToMove = numberOfTextLinesToMove * fontSize;

 

if (numberOfPixelsToMove != 0)

{

System.Drawing.Drawing2D.Matrix translateMatrix =

new System.Drawing.Drawing2D.Matrix();

translateMatrix.Translate(0, numberOfPixelsToMove);

mousePath.Transform(translateMatrix);

}

panel1.Invalidate();

}

}

 

События клавиатуры

События:

· KeyDown – при нажатии

· KeyUP – при отпускании

· KeyPress – удержание, посылается серия событий

 

Свойства класса KeyEventArgs:

Alt, Control, Shift - true – нажата, false – не нажата.

 

KeyCode – код нажатой клавиши

KeyData – совокупность кодов нажатых клавиш

KeyValue – десятичное значение свойства KeyData

Handled – флаг, указывающий было ли сообщение обработано. true – дальнейшая обработка нажатия не требуется. По умолчанию – false.

 



Дата добавления: 2019-02-08; просмотров: 708;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.034 сек.