Прототип к варианту 12 - Отсечение_1
В Windows существует немало функций, управляющих процессом рисования в контекстах устройств. Для таких функций необходим механизм, позволяющий определять области в контекстах устройств.
Регионы
Регионы (regions) играют важную роль при управлении контекстами устройств — по аналогии с прямоугольниками, используемыми во многих управляющих функциях Windows. Регион представляет собой объект GDI, описывающий некоторую область в контексте устройства. С каждым регионом связан собственный манипулятор объекта. Когда надобность в регионе отпадает, его, как и любой объект GDI, следует удалить функцией DeleteObject (см. главу 8). Регион может представлять собой простой прямоугольник или быть сколь угодно сложным. Он может состоять из нескольких частей, не соприкасающихся друг с другом, а также включать многоугольники и круги.
При работе с регионами необходимо помнить об одном важном обстоятельстве: в функциях регионов всегда используются клиентские координаты. В процессе построения графического вывода Windows применяет все координатные Преобразования (мировые в логическое окно, логическое окно в область просмотра), а затем проверяет каждый пиксел на принадлежность к об-ла- сти отсечения, чтобы узнать, следует ли выводить его. Как было показано выше, вы можете рисовать за пределами области просмотра (см. .рис. 7.7 и пример Viewport). Если вы хотите ограничить вывод границами области просмотра, все, что для этого необходимо, — создать прямоугольный регион, совпадающий с областью просмотра, и выбрать его в качестве текущей области отсечения.
Но что делать, если вам потребовалось создать сложный графический объект (аналог региона) для рисования в логических координатах? Для решения этой задачи в Win32 появился новый графический объект, называемый траекторией (path), — но эта тема рассматривается в главе 8.
Функции для создания регионов и операций с ними перечислены в табл. 7.11.
Таблица 7.11. Функции регионов
Функция |
Описание |
CombineRgn |
Комбинирует два региона Заданным способом |
CreateEllipticRgn CreateEllipticRgnlndirect |
Создает круглые и эллиптические регионы |
CreatePolygonRgn CreatePolyPolygonRgn |
Создает регион на основе одного или нескольких многоугольников |
CreateRectRgn CreateRectRgnlndirect |
Создает прямоугольные регионы |
CreateRoundRectRgn |
Создает регион на основе прямоугольника с закругленными краями |
EqualRgn |
Проверяет, совпадают ли два региона |
ExtCreateRegion |
Позволяет применить преобразование к региону |
GetRgnBox |
Получает прямоугольник, вмещающий заданный регион |
GetRegionData |
Получает данные, описывающие регион |
OffsetRgn |
Смещает регион |
PtlnRegion |
Проверяет, принадлежит ли точка заданному региону |
RectlnRegion |
Проверяет, принадлежит ли какая-либо часть прямоугольника заданному региону |
SetRectRgn |
Изменяет заданный регион так, чтобы он описывал прямоугольную область |
Отсечение
Графический вывод в контексте устройства может быть ограничен некоторыми участками логического окна. Это интуитивно ясно из того факта, что при рисовании на форме Visual Basic графика не рисуется поверх элементов формы, если только отсечение не было явно отменено переводом свойства ClipControls в состояние FALSE. Windows исключает область, занимаемую элементами, из общей области вывода в контексте устройства формы. Этот процесс называется отсечением, а область, в которой разрешен вывод, называется областью отсечения. Отсечение также может применяться во время рисования для создания разнообразных графических эффектов. Эта возможность продемонстрирована в проекте Region, который будет описан ниже в этой главе.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.