Незакрашенный прямоугольник
Метод 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; просмотров: 698;