Исходные коды описывают потрясающие свойства применения двоичных данных регионов структур и классов class CRgn, class Region, struct RGNDATA, class RegionData. Используя регионы можно создавать окна приложений любой формы и узоры любой сложности.
Двоичные данные регионов в Win32 и MFCstruct RGNDATA, в .NETclass RegionData. Данные регионов содержат массив прямоугольных областей ограничения прорисовки объекта. С помощью регионов можно по собственному замыслу определить форму окна приложения на рабочем столе, границы рисования изображений в рабочем окне приложения, определить попадание в непрямоугольную область указателя мыши.
Создавать области ограничения рисования любой сложности нам предоставляет функциональность Windows API. Из методов создания регионов можно выделить две основные:
HRGN CreateRectRgn(...) - создает прямоугольную область ограничения
int CombineRgn(...) - создает на основе двух регионов третий по определенному алгоритму комбинирования.
С помощью этих методов можно создавать области ограничения любой конфигурации. Этот эффект достигается благодаря прямоугольной интерпретации наших мониторов. Наименьшая точка - пиксель имеет прямоугольную форму и определяет точность создания желаемого региона. Создать окно приложения прямоугольной формы , прямоугольной с закругленными углами , эллиптической и многоугольной можно с помощью "простых" методов. Но если задумано изготовить окно особой, оригинальной формы или нарисовать узор сложной конфигурации, то тут не обойтись без многочисленной комбинации простых регионов.
Огромную "помощь" в создании сложных областей ограничения могут оказать битовые рисунки. Принцип построения регионов с помощью битовых массивов основан на их комбинации с установленным флагом исключения определенной области.Последовательность создания региона на основе битового массива:
Выбирается цвет исключения из основного региона (для упрощения
назовем его цветом прозрачности)
Создается основной регион прямоугольной формы с габаритными
размерами как у картинки (.bmp)
Сканируется битовый массив на предмет обнаружения пикселя с
цветом прозрачности, на основе найденного пикселя создается второй
регион размером 1х1 пиксель (выбор пикселя в качестве региона
позволяет создавать желаемый регион с максимальной точностью)
Комбинируются два региона с помощью функции
int CombineRgn( HRGN hrgnDest, HRGN hrgnSrc1, HRGN hrgnSrc2, int fnCombineMode ) с режимом комбинирования RGN_XOR. В итоге
в hrgnDest получается регион hrgnSrc1 за вычетом области отсечения hrgnSrc2
Продолжается сканироваться битовый массив на предмет обнаружения
следующего пикселя с цветом прозрачности. Снова создается регион размером
1х1 пиксель
Комбинируются два региона, но теперь в качестве первого берется
регион-результат предыдущего сканирования, в качестве второго
регион обнаруженного следующего пикселя прозрачности. В результате
получается новый регион за вычетом предыдущих областей
Цикл замыкается, битовый массив сканируется далее до последнего пикселя.
На основе таких циклов создания и комбинирования регионов в итоге
создается желаемый регион, в котором будут исключены все зоны
выбранного цвета прозрачности
Для создания регионов произвольной формы по вашим картинкам (битовым массивам .bmp) предлагается программа RgnCreator, находится в разделе прикладные программы. Очень проста в использовании, предоставляет выбор цвета исключения указателем мыши, тестирует результат создания региона.
Исходники примеров применения двоичных данных региона написаны на языках программирования С++ и C#, среда программирования Visual Studio.NET 2003. Архив исходников содержит исходные коды Win32, с применением MFC, исходный код для среды .NET на языке C#.
Скачать исходник
Тема: «Фигурные окна с помощью RGNDATA, RegionData»
examplergn_vs8.zip
Размер:772 КбайтЗагрузки:4743