Читаем Язык программирования С# 2005 и платформа .NET 2.0. полностью

 private bool isImageClicked = false;

 ClickedImage imageClicked = ClickedImage.ImageA;

 public MainForm() {

  …

  // Установка прямоугольников.

  imageRects[0] = new Rectangle(10, 10, 90, 90);

  imageRects[1] = new Rectangle(10, 110, 90, 90);

  imageRects[2] = new Rectangle (10, 210, 90, 90);

 }

 private void MainForm_MouseDown(object sender, MouseEventArgs e) {

  // Получение координат (х, у) щелчка.

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

  // Проверка попадания указателя в любой из прямоугольников.

  if (imageRects[0].Contains(mousePt)) {

   isImageClicked = true;

   imageClicked = ClickedImage.ImageA;

   this.Text = "Вы щелкнули на изображении А";

  } else if (imageRects[1].Contains(mousePt)) {

   isImageClicked = true;

   imageClicked = Clickedlmage.ImageB;

   this.Text = "Вы щелкнули на изображении В";

  } else if (imageRects[2].Contains(mousePt)) {

   isImageClicked = true;

   imageClicked = ClickedImage.ImageC;

   this.Text = "Вы щелкнули на изображении C";

  } else { // Попадания не обнаружено, использовать умолчания.

   isImageClicked = false;

   this.Text = "Проверка попаданий в зону изображения";

  }

  // Обновление области клиента.

  Invalidate();

 }

}

Обратите внимание на то, что при последней проверке член-переменная isImagеCliсked устанавливается равной false (ложь), поскольку пользователь не выполнил щелчка ни одном из трех изображений. Это важно, если вы хотите удалить контур у ранее выделенного изображения. После проверки всех элементов область клиента обновляется. Вот как выглядит модифицированный обработчик Paint.

private void MainForm_Paint(object sender, PaintEventArgs e) {

 Graphics g = e.Graphics;

 // Визуализация изображений.

 …

 // Прорисовка контура (при щелчке в соответствующем месте)

 if (isImageClicked == true) {

  Pen outline = new Pen(Color.Tomato, 5);

  switch (imageClicked) {

  case ClickedImage.ImageA:

   g.DrawRectangle(outline, imageRects[0]);

   break;

  case Clickedlmage.ImageB:

   g.DrawRectangle(outline, imageRects[1]);

   break;

  case ClickedImage.ImageC:

   g.DrawRectangle(outline, imageRects[2]);

   break;

  default:

   break;

  }

 }

}

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

Проверка попадания в область, отличную от прямоугольной

Теперь давайте выясним, как выполнить проверку попадания в область, форма которой отличается от прямоугольника? Предположим, что вы обновили свое приложение так, что теперь в нем отображается геометрический шаблон неправильной формы, и при щелчке на этом шаблоне его тоже требуется выделить с помощью контура (рис. 20.21).

Рис. 20.21. Проверка попадания в многоугольники

Этот геометрический образ был создан на форме с помощью метода FillPath() типа Graphics. Указанный метод получает на вход экземпляр объекта GraphicsPath, инкапсулирующий последовательность соединенных линий, кривых и строк. Добавление новых элементов в экземпляр GraphicsPath осуществляется с помощью последовательности связанных методов Add, как описывается в табл. 20.9.

Таблица 20.9. Связанные методы Add класса GraphicsPath

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT