Часть полного текста документа:Работа с регионами в Visual C++ Vander Nunes В Win32 API есть набор функций для работы с регионами. При помощи регионов Вы можете создавать различные поверхности, используя только стандартные геометрические фигуры. Ну а дальше всё зависит от Вашей выдумки. Итак, приступим к определениям: HRNG: Это всего лишь тип данных, означающий "хэндл региона". Такой хэндл потребуется для каждого региона, с которым Вы захотите работать. Пример использования: HRGN hRegion = CreateRectRgn(x,y,x+128,y+128); После завершения работы с регионом, необходимо удалить объект, связанный с регионом при помощи функции DeleteObject(). CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreatePolyPolygonRgn, CreateRectRgn, CreateRectRgnIndirect, CreateRoundRectRgn, EqualRgn, ExtCreateRegion, FillRgn, FrameRgn, GetPolyFillMode, GetRegionData, GetRgnBox, InvertRgn, OffsetRgn, PaintRgn, PtInRegion, RectInRegion, SetPolyFillMode. Это основные функции, которые предназначены для создания и работы с регионами. Как видно из названий, регионы можно создавать круглые, квадратные, а также любой другой формы. SetWindowRgn При помощи этой функции можно прикрепить регион к любому окну. Например, после использования этой функции, окно может выглядеть следующим образом: Чтобы проделать такое с окном, понадобятся следующие функции: // эта функция создаёт круглый регион. HRGN CreateEllipticRgn ( int nLeftRect, // x-координата верхнего-левого угла int nTopRect, // y-координата верхнего-левого угла int nRightRect, // x-координата нижнего-правого угла int nBottomRect // y-координата нижнего-правого угла ); // эта функция совмещает два региона int CombineRgn ( HRGN hrgnDest, // хэндл конечного региона HRGN hrgnSrc1, // хэндл исходного региона HRGN hrgnSrc2, // хэндл исходного региона int fnCombineMode // режим совмещения регионов ); // эта функция прикрепляет регион к окну. // чтобы убрать регион с окна, надо вместо хэндла региона поставить NULL. int SetWindowRgn ( HWND hWnd, // хэндл окна, на которое будет установлен регион HRGN hRgn, // хэндл региона BOOL bRedraw // флаг перерисовки окна ); Ну а теперь взглянем на реальный код, который демонстрирует создание окна, изображение которого приведено выше: // -------------------------------------------------- // Создаём круглый регион. // Используем отрицательную начальную координату, чтобы наш элипс // захватил заголовок окна. // -------------------------------------------------- HRGN hRegion1 = CreateEllipticRgn(20,-20,190,150); // -------------------------------------------------- // создаём ещё один круглый регион в другом месте. // -------------------------------------------------- HRGN hRegion2 = CreateEllipticRgn(140,100,300,240); // -------------------------------------------------- // склеиваем два региона, чтобы сделать новый регион. // итоговый регион будет помещён в region1, // подобно операции: // // hRegion1 = hRegion1 + hRegion2. // // в функции CombineRgn() можно использовать набор операций RGN_. // -------------------------------------------------- CombineRgn(hRegion1, hRegion1, hRegion2, RGN_OR); // -------------------------------------------------- // прикрепляем регион к окну // -------------------------------------------------- SetWindowRgn(hWnd, hRegion1, true); // -------------------------------------------------- // удаляем объекты регионов // -------------------------------------------------- DeleteObject(hRegion1); DeleteObject(hRegion2); Чтобы вернуть окно в нормальное состояние (без региона), воспользуйтесь следующей функцией: SetWindowRgn(hWnd, NULL, true); Скачать пример - 13Кб СКИНЫ Тема скинов довольно популярна в программировании. ............ |