Создание и применение регионов

Когда регион создается, координаты его вершин не привязываются к определенной системе отсчета. Рассмотренные выше регионы отсечения и метарегион связываются с конкретным контекстом устройства и задают некоторую фигуру в системе координат рабочей области окна. Регион обновления характеризует окно, а не контекст, но функция GetUpdateRgnC) также получает дескриптор региона hRgn, заданного в системе координат рабочей области окна. Регион, задаваемый функцией SetWi ndowRgn(hWnd. bRedraw), определяет видимую часть окна и должен быть задан в системе координат окна, а не рабочей области. Значение TRUE флага bRedraw указывает операционной системе, что после вызова функции изображение окна должно обновиться.

Регион окна, в отличие от региона отсечения, не уничтожается при вызове контекста. Поэтому его достаточно задать один раз после создания окна, чтобы он не только участвовал в формировании системного региона при каждом последующем вызове BeginPaint(), но и использовался операционной системой в качестве области отсечения при рисовании рабочей области и неклиентской части окна.

Чтобы создать нестандартное окно с оригинальным дизайном, нужно выполнить простую последовательность действий, приведенную в следующем списке:

1. Создать окно стиля WSP0PUP без рамки и заголовка, задать на нем регион окна требуемой формы и вывести в окно фоновое изображение.

2. Самостоятельно реализовать функции, выполняемые системой при перемещении и щелчках мыши в неклиентской области окна. Например, можно проверять попадание в регион координат мыши по сообщениям WMJ_BUTT0ND0WN, WM_M0VE и WM_LBUTT0NUP. После этого достаточно просто реализовать логику захвата и перемещения окна функцией MoveWindow() по нажатию клавиши мыши.

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


⇐ Предыдущая| |Следующая ⇒