Исходные коды программ и игр

Программирование - работа и хобби

Исходный код применения RGNDATA, RegionData для GDI и GDI+

Язык программирования C++

Исходник применения двоичных данных

Исходные коды описывают потрясающие свойства применения двоичных данных регионов структур и классов CRgn, Region, RGNDATA, RegionData. Используя регионы можно создавать узоры любой сложности и окна приложений любой формы.

Двоичные данные регионов в Win32 и MFC RGNDATA, в .NET RegionData. Данные регионов содержат массив прямоугольных областей ограничения прорисовки объекта. С помощью регионов можно по собственному замыслу определить форму окна приложения на рабочем столе, границы рисования изображений в рабочем окне приложения, определить попадание в непрямоугольную область указателя мыши.

Методы создания регионов

Создавать области ограничения рисования любой сложности нам предоставляет функциональность Windows API. Из методов создания регионов можно выделить две основные:

  • CreateRectRgn() - создает прямоугольную область ограничения
  • CombineRgn() - создает на основе двух регионов третий по определенному алгоритму комбинирования.

С помощью этих методов можно создавать области ограничения любой конфигурации. Этот эффект достигается благодаря прямоугольной интерпретации наших мониторов. Наименьшая точка - пиксель имеет прямоугольную форму и определяет точность создания желаемого региона. Создать окно приложения прямоугольной формы , прямоугольной с закругленными углами , эллиптической и многоугольной можно с помощью "простых" методов. Но если задумано изготовить окно особой, оригинальной формы или нарисовать узор сложной конфигурации, то тут не обойтись без многочисленной комбинации простых регионов.

Создание регионов по битовым массивам

Огромную "помощь" в создании сложных областей ограничения могут оказать битовые рисунки. Принцип построения регионов с помощью битовых массивов основан на их комбинации с установленным флагом исключения определенной области.Последовательность создания региона на основе битового массива:

  1. Выбирается цвет исключения из основного региона (для упрощения назовем его цветом прозрачности)
  2. Создается основной регион прямоугольной формы с габаритными размерами как у картинки (.bmp)
  3. Сканируется битовый массив на предмет обнаружения пикселя с цветом прозрачности, на основе найденного пикселя создается второй регион размером 1х1 пиксель (выбор пикселя в качестве региона позволяет создавать желаемый регион с максимальной точностью)
  4. Комбинируются два региона с помощью функции int CombineRgn( HRGN hrgnDest, HRGN hrgnSrc1, HRGN hrgnSrc2, int fnCombineMode ) с режимом комбинирования RGN_XOR. В итоге в hrgnDest получается регион hrgnSrc1 за вычетом области отсечения hrgnSrc2
  5. Продолжается сканироваться битовый массив на предмет обнаружения следующего пикселя с цветом прозрачности. Снова создается регион размером 1х1 пиксель
  6. Комбинируются два региона, но теперь в качестве первого берется регион-результат предыдущего сканирования, в качестве второго регион обнаруженного следующего пикселя прозрачности. В результате получается новый регион за вычетом предыдущих областей
  7. Цикл замыкается, битовый массив сканируется далее до последнего пикселя. На основе таких циклов создания и комбинирования регионов в итоге создается желаемый регион, в котором будут исключены все зоны выбранного цвета прозрачности

Исходники С++ с примерами

Для создания регионов произвольной формы по вашим картинкам (битовым массивам .bmp) предлагается программа RgnCreator, находится в разделе прикладные программы. Очень проста в использовании, предоставляет выбор цвета исключения указателем мыши, тестирует результат создания региона.

Исходники примеров применения двоичных данных региона написаны на языках программирования С++ и C#, среда программирования Visual Studio.NET 2003. Архив исходников содержит исходные коды Win32, с применением MFC, исходный код для среды .NET на языке C#.

Файл загрузки Размер Кол-во загрузок
examplergn_vs8.zip 💾 772Кбайт 4300