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

  • docx
  • 18.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-002241.docx

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

Приложение 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();

}

}


 

Посмотрите также