ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
В данный момент вы уже можете запустить свое приложение и убедиться в том, что контур появляется вокруг каждого изображения, на котором был выполнен щелчок (и что никакого контура не появляется, когда вы щелкаете за пределами этих изображений).
Проверка попадания в область, отличную от прямоугольной
Теперь давайте выясним, как выполнить проверку попадания в область, форма которой отличается от прямоугольника? Предположим, что вы обновили свое приложение так, что теперь в нем отображается геометрический шаблон неправильной формы, и при щелчке на этом шаблоне его тоже требуется выделить с помощью контура (рис. 20.21).
Рис. 20.21.
Этот геометрический образ был создан на форме с помощью метода FillPath типа Graphics. Указанный метод получает на вход экземпляр объекта GraphicsPath, инкапсулирующий последовательность соединенных линий, кривых и строк. Добавление новых элементов в экземпляр GraphicsPath осуществляется с помощью последовательности связанных методов Add, как описывается в табл. 20.9.
Таблица 20.9. Связанные методы Add класса GraphicsPath
Методы | Описание |
---|---|
AddArc | Добавляет к имеющейся фигуре эллиптическую дугу |
AddBezier AddBeziers | Добавляет к имеющейся фигуре кубическую кривую Безье (или множество кривых Безье) |
AddClosedCurve | Добавляет к имеющейся фигуре замкнутую кривую |
AddCurve | Добавляет к имеющейся фигуре кривую |
AddEllipse | Добавляет к имеющейся фигуре эллипс |
AddLine AddLines | Добавляет к имеющейся фигуре сегмент линии |
AddPath | Добавляет к имеющейся фигуре указанный GraphicsPath |
AddPie | Добавляет к имеющейся фигуре сектор круга |
AddPolygon | Добавляет к имеющейся фигуре многоугольник |
AddRectangle AddRectangles | Добавляет к имеющейся фигуре прямоугольник (или несколько прямоугольников) |
AddString | Добавляет к имеющейся фигуре текстовую строку |
Укажите using System.Drawing.Drawing2D и добавьте новый член GraphicsPath в класс Form. В рамках конструктора формы постройте множество элементов, представляющих соответствующую траекторию.
Обратите внимание на вызовы StartFigure и CloseFigure. При вызове StartFigure вы можете вставить новый элемент в траекторию, которую вы строите. Вызов CloseFigure
закрывает имеющуюся фигуру и начинает новую (если это требуется). Также следует знать, что в том случае, когда фигура содержит последовательность соединенных линий и кривых (как в случае с экземпляром myPath), цикл завершается путем соединения конечной и начальной точек с помощью линий. Сначала добавьте в перечень ClickedImage дополнительное имя StrangePath.Затем обновите имеющийся обработчик события MouseDown, чтобы проверить присутствие указателя мыши в границах GraphicsPath. Как и для типа Region, это можно сделать с помощью члена IsVisible.
Наконец, измените обработчик Paint, как предлагается ниже.
Исходный код. Проект HitTestinglmages размещен в подкаталоге, соответствующем главе 20.
Формат ресурсов .NET
До этого момента все наши приложения, использующие внешние ресурсы (например, файлы изображений), требовали, чтобы загружаемые файлы находились в каталоге приложения. Поэтому для загрузки этих файлов мы использовали их непосредственные имена.
Такая программная логика требует, чтобы каталог приложения содержал три файла с именами imageA.bmp, imageB.bmp и imageС.bmp, иначе в среде выполнения будет сгенерировано соответствующее исключение.
Вы можете помнить из главы 11, что компоновочный блок представляет собой коллекцию типов и, необязательно, ресурсов. В этой связи нашей заключительной темой обсуждения в этой главе будет выяснение того, как выполнить привязку внешних ресурсов (например, файлов изображений и строк) непосредственно к компоновочному блоку. Тогда ваш двоичный блок .NET будет истинно самодостаточным. На элементарном уровне объединение внешних ресурсов в компоновочном блоке .NET предполагает выполнение следующих шагов.