Ресурсы приложения
Приложение 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();
}
}
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.