Модификация приложения Windows Forms : вкладка «Объекты и градиент»
Теперь поработаем с градиентами более с более близкого расстояния. Редактируем вторую вкладку tabPage2 следующим образом:
TabPage:
Text: | Объекты и градиент |
Cursor: | Hand |
Рис. 5. 1. Редактор коллекции TabPage: меняем Text и Cursor
На второй вкладке разместим сначала элемент Panel ( , группа «Контейнеры» панели элементов), а затем три кнопки. Свойства всего этого дела (имена элементов не трогаем):
Panel:
(Name): | panel1 |
BackColor: | Black |
AutoScroll: | True |
Button:
(Name): | button1 |
Text: | Прямоугольник |
Button:
(Name): | Button2 |
Text: | Треугольник |
Button:
(Name): | Button3 |
Text: | Круг |
Расстановка элементов выглядит примерно так:
Рис. 5. 2. Модифицированная форма приложения и расстановка необходимых элементов управления на второй вкладке
Кнопки находятся внутри элемента Panel (поверх).
Открываем код нашей формы LWP 19 Main (файл LWP 19 Main . cs). Ищем:
public LWP19Main()
{
InitializeComponent();
Добавляем после:
DoubleBuffered = true;
Ищем:
public partial class LWP19Main : Form
{
Добавляем после:
// Начало: вкладка "Объекты и градиент"
// Для работы с появлением/скрытием фигур
bool bDrawFigure1 = false;
bool bDrawFigure2 = false;
bool bDrawFigure3 = false;
// Создаём цвета
Color c1 = Color.FromArgb(51, 204, 51);
Color c2 = Color.FromName("Green");
Color c3 = Color.FromArgb(0, 0, 0);
Color c4 = Color.FromArgb(51, 104, 51);
// Конец: вкладка "Объекты и градиент"
Инициализируем событие Paint для элемента Panel второй вкладки:
|
|
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = panel1.CreateGraphics();
// Задаём визуализацию со сглаживанием для объекта Graphics
g.SmoothingMode = SmoothingMode.HighQuality;
// Массив точек треугольника
Point[] triangle = { new Point(80, 150), new Point(200, 50), new Point(320, 150) };
// Задаём перья с цветами c1 и c2 и толщиной в 1 пиксель
Pen pen1 = new Pen(c1, 1);
Pen pen2 = new Pen(c2, 1);
// Заливка и цвета градиента
Brush brush1 = new LinearGradientBrush(triangle[0], triangle[2], c1, c4);
Brush brush2 = new LinearGradientBrush(triangle[0], triangle[2], c3, c2);
if (bDrawFigure1)
{
// Заливаем цветом прямоугольник
g.FillRectangle(brush2, new Rectangle(100, 150, 200, 100));
}
if (bDrawFigure2)
{
// Заливаем цветом треугольник
g.FillPolygon(brush2, triangle);
}
if (bDrawFigure3)
{
// Заливаем цветом эллипс
g.FillEllipse(brush1, new Rectangle(175, 175, 50, 50));
}
}
И последовательно инициализируем двойным нажатием события каждой кнопки. Событие Click для каждой из кнопок будет таким:
private void button1_Click(object sender, EventArgs e)
{
if (bDrawFigure1 == true) { bDrawFigure1 = false; }
else bDrawFigure1 = true;
panel1.Invalidate();
}
private void button2_Click(object sender, EventArgs e)
|
|
{
if (bDrawFigure2 == true) { bDrawFigure2 = false; }
else bDrawFigure2 = true;
panel1.Invalidate();
}
private void button3_Click(object sender, EventArgs e)
{
if (bDrawFigure3 == true) { bDrawFigure3 = false; }
else bDrawFigure3 = true;
panel1.Invalidate();
}
Компилируем (Debug) и запускаем. Переходим на закладку «Объекты и градиент» и нажимаем на кнопочки... Любуемся, как появляется «домик» с круглым окном...
6. Модификация приложения Windows Forms : вкладка «Мой монитор сломался!»
Следующая вкладка будет реализовывать вот что: откроем её, нажмём где-нибудь на свободном участке вкладки левую кнопку мыши и потащить курсор. Выделенный участок инвертируется (инвертируются его цветовая палитра) даже за пределами формы — это такое взаимодействие высокоуровневой GDI+ и низкоуровневой GDI...
Создаём новую вкладку tabPage 3. Для создания вкладки выделяем мышкой TabControl и на панели свойств в области команд жмём «Добавить вкладку». Свойства новой вкладки:
TabPage:
Text: | Объекты и градиент |
Cursor: | Cross |
Накидаем на вкладку различных элементов, каких не важно. В нашем случае на вкладку было помещено две кнопки, два TextBox и один Label. Изменим свойства элементов управления как угодно? Изменим цвет фона элемента, параметры шрифты и прочее.
|
|
Рис. 6. 1. Модифицированная форма приложения и расстановка необходимых элементов управления на третьей вкладке
Теперь, последовательно, для вкладки tabPage 3 (нужно переключиться на неё в конструкторе и выделить область самой вкладки) инициализируем три события: MouseDown, MouseMove и MouseUp:
Код дополнительной переменной, всех событий и двух дополнительных методов будет таким:
Rectangle frameRect; // Вкладка "Мой монитор сломался?!"
private void tabPage3_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
// Фиксируем стартовую точку
frameRect.Location = new Point(e.X, e.Y);
frameRect.Size = new Size(0, 0);
}
base.OnMouseDown(e); // Вызываем базовый метод
}
private void tabPage3_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
DrawFrame(); // Стираем старый прямоугольник
frameRect.Width = e.X - frameRect.Left;
frameRect.Height = e.Y - frameRect.Top;
DrawFrame(); // Рисуем новый прямоугольник
}
base.OnMouseMove(e); // Вызываем базовый метод
}
private void tabPage3_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
DrawFrame(); // Стираем старый прямоугольник
|
|
frameRect.Size = new Size(0, 0);
}
base.OnMouseUp(e); // Вызываем базовый метод
}
protected void DrawFrame()
{
if (!frameRect.Size.IsEmpty)
{
Rectangle r = RectangleToScreen(frameRect);
// Собственно, инвертируем цвета
ControlPaint.FillReversibleRectangle(r, Color.FromArgb(40, 0, 0, 160));
}
}
protected override void OnLoad(EventArgs e)
{
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
base.OnLoad(e);
}
Обратим внимание на метод OnLoad: здесь идёт включение режима двойной буферизации. Для его включения необходимо в окне, в которое производится отрисовка (например, элементе управления или форме) установить флаги UserPaint, AllPaintingInWmPaint и DoubleBuffer перечисления System.Windows.Forms.ControlStyles.
Вывод графики довольно заметно ускоряется (несмотря на необходимость дополнительного переноса на экран).
Компилируем (Debug) и запускаем. Переходим на третью вкладку и инвертируем цвета у всего, до чего дотягивается мышка...
Дата добавления: 2019-09-13; просмотров: 259; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!