Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Отсеченный путь




Подобно региону отсечения, отсеченный путь - это другой графический объект, который приложение может выбрать в контексте устройства. В отличие от региона отсечения, отсеченный путь всегда создается приложением, и он используется для того, чтобы отсечь одну или несколько неправильных форм. Например, приложение может использовать линии и кривые, которые формируют контуры символов в строке текста, чтобы определить отсеченный путь.

Чтобы создать отсеченный путь, сначала необходимо создать путь, который описывает требуемую неправильную форму. Пути создаются, путем вызова соответствующей функции рисования графического интерфейса устройства (GDI) после вызова функции BeginPath и перед вызовом функции EndPath. Эту совокупность функций называют группой пути (path bracket).

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

Следующая таблица описывает режимы использования.

Режим Описание
RGN_AND Отсеченный путь включает в себя пересечение (области перекрытия) региона отсечения контекста устройства и текущего пути.
RGN_COPY Отсеченный путь - текущий путь.
RGN_DIFF Отсеченный путь включает в себя регион отсечения контекста устройства с какой-либо пересекающимися частями текущего исключенного пути.
RGN_OR Отсеченный путь включает в себя союз (объединенные области) региона отсечения контекста устройства и текущего пути.
RGN_XOR Отсеченный путь включает в себя союз региона отсечения контекста устройства и текущего пути, но исключает пересечение.

 

Контекст дисплея

Windows поддерживает три типа контекста дисплея – контекст класса, приватный контекст и общий контекст. Контекст класса и приватный контекст используются в приложениях, которые выводят на экран большое количество информации (настольные издательские системы, графические пакеты и т.д.). Все остальные приложения используют общий контекст. Контекст класса является устаревшим и поддерживается только для обеспечения совместимости с предыдущими версиями Windows. В приложениях рекомендуется использовать только приватный контекст.

Контексты устройств хранятся в КЭШе, управляемом системой. Хэндл общего контекста программа получает с помощью функций GetDC(), GetDCEx(), BeginPaint(). После того как программа отработает с дисплеем, она должна освободить контекст, вызвав функцию ReleaseDC() или EndPaint() (в случае если контекст был получен с помощью BeginPaint()). После того, как контекст дисплея освобождён, все изменения, внесённые в него программой, теряются.

Приватный контекст в отличие от общего сохраняет все изменения даже после того, как прикладная программа освободила его. Приватный контекст не хранится в КЭШе, поэтому программа может не освобождать его. Память для приватного контекста выделяется системой специально для данного приложения. Для работы с приватным контекстом необходимо при регистрации класса окна указать стиль CS_OWNDC. Система сама удаляет приватный контекст в том случае, когда удаляется окно.

При работе с контекстами хэндлы контекста устройства с помощью функции BeginPaint() необходимо получать только в случае обработки сообщения WM_PAINT. Во всех остальных случаях необходимо использовать функции GetDC() или GetDCEx().

Для получения дескриптора контекста дисплея можно использовать два метода:

I) Этот метод используется при обработке сообщения WM_PAINT. Контекст устройства получают вызовом функции BeginPaint, имеющей следующий прототип:

HDC BeginPaint(

HWND hwnd, – дескриптор окна;

LPPAINTSTRUCT lPaint – указатель на структуру типа PAINTSTRUCT

);

В случае успешного завершения функция возвращает дескриптор контекста дисплея для клиентской области окна. Кроме этого функция заполняет поля структуры PAINTSTRUCT, имеющей следующее определение:

typedef struct tagPAINTSTRUCT {

HDC hdc; – контекст устройства;

BOOL fErase; – признак стирания фона клиентской области;

RECT rcPaint; – границы недействительного прямоугольника;

BOOL fRestore; –

BOOL flncUpdate; –

BYTE rgbReserved[32];

} PAINTSTRUCT;

 

Последние три поля используются операционной системой. Поле rcPaint типа RECT содержит координаты обновляемого прямоугольника в пикселах относительно левого верхнего угла клиентской области окна. Эти координаты либо определяются системой, либо задаются при вызове функции InvalidateRect. Регион отсечения в этом случае определяется посредством пересечения видимого региона и обновляемого прямоугольника.

Поле fErase определяет будет ли Windows обновлять фон недействительного региона. Если fErase имеет значение TRUE, то это означает стирание (обновление) фона. Когда обновляемый регион формируется вызовом функции InvalidateRect или InvalidateRgn, то один из параметров этих функций разрешает или подавляет стирание фона.

Если задано стирание фона, то функция BeginPaint посылает оконной процедуре сообщение WM_ERASEBKGND. Приложение может обработать это сообщение, чтобы отобразить однородный или растровый фон. Однако обычно оно обрабатывается по умолчанию функцией DefWindowProc, которая обновляет фон с использованием кисти, определённой в поле hbrBackground класса окна. До своего завершения функция BeginPaint посылает оконной процедуре ещё одно сообщение – WM_NCPAINT. Оно заставляет приложение перерисовывать неклиентскую область. Это сообщение обрабатывается также функцией DefWindowProc.

Типовой процесс обработки сообщения WM_PAINT выглядит следующим образом:

case WM_PAINT;

hDC = BeginPaint(hWnd, &ps);

[использование функций GDI]

EndPaint(hWnd,&ps);

return 0;

 

После завершения операций рисования приложение должно вызвать функцию EndPaint, чтобы освободить контекст устройства.




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 308; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.