Функция RestoreDC() не создает новый контекст, она только восстанавливает элементы именно того контекста, который был запомнен. То есть нельзя быстро переписать содержимое контекста hdc в контекст с дескриптором hdcl, выполнив следующий фрагмент кода:

Изменение элементов контекста

HDC hdc - GetDC(hWnd):
HDC hdcl - GetDC(hWnd):

<Настройка контекста hdc >

int Id - SaveDC(hdc);
bool Res - RestoreDCChdcl. Id);

Вызов RestoreDC(hdcl, Id) не сможет изменить контекст hdcl, поэтому будет возвращен признак ошибки false. Функции можно передавать для восстановления только запомненный ранее дескриптор hdc.

Указанные функции нельзя применять для занесения в стек нескольких вариантов настройки одного контекста, чтобы потом выбирать из стека нужный в данный момент вариант. Данные, конечно, можно прочитать не из вершины стека, но при их чтении все элементы, записанные в стек позднее, будут уничтожены. Таким образом, рассмотренные функции могут применяться только для сохранения и восстановления контекста в последовательности вложенных вызовов процедур, связанных общим контекстом устройства.

Из примеров, входящих в комплект поставки Visual С, видно, что их авторы, учитывая ограничения на количество одновременно открытых контекстов, стремятся освободить контекст как можно быстрее, что показывает типичная схема работы, приведенная в следующем списке:

1. Запрашивается контекст.

2. Создаются объекты.

3. Объекты помещаются в контекст.

4. Рисуются примитивы.

5. Объекты выводятся из контекста и уничтожаются.

6. Освобождается контекст устройства.

При воспроизведении рисунка по таймеру или сообщению WM_PAINT процессы создания и уничтожения повторяются.

Эта манера работы может привести к дополнительным затратам времени на многократные операции создания и уничтожения объектов, запроса и настройки контекста, освобождения контекста. Но существуют и другие методики работы с контекстом. Если для формирования изображения необходимо несколько вариантов настройки контекста, то все они однократно создаются и настраиваются при инициализации приложения, а при его завершении объекты уничтожаются и контексты освобождаются. Также следует использовать функции SaveDCC) и RestoreDCО, позволяющие временно сохранить контекст, изменить его настройки, а потом при необходимости восстановить сохраненный контекст. Восстановление сохраненного контекста происходит быстрее, чем запрос и настройка нового.


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