Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Чтение метафайла


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

Открыть Clipboard функцией OpenClipboard (если Clipboard не был открыт ранее при чтении данных в других форматах)

Вызвать функцию GetClipboardData, передав ей через единственный параметр константу CF_METAFILEPICT, и проверить возвращенное значение. Если функция вернула NULL, Clipboard не содержит данных в формате CF_METAFILEPICT. Ненулевое значение является идентификатором блока памяти заголовка метафайла. Этот метафайл можно проиграть в контексте отображения для рисования содержимого Clipboard

Зафиксировать блок памяти заголовка метафайла

Выполнить проигрывание метафайла в контексте отображения

Расфиксировать блок памяти заголовка метафайла

Закрыть Clipboard функцией CloseClipboard

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

hmf = (HMETAFILE)GetClipboardData(CF_METAFILEPICT); if(hmf != NULL) { lpmfp = (LPMETAFILEPICT)GlobalLock(hmf); if(lpmfp != NULL) { SaveDC(hdc); PrepareMetaFile(hdc, lpmfp, cxClient, cyClient); PlayMetaFile(hdc, lpmfp->hMF); RestoreDC(hdc, -1); GlobalUnlock(hmf); } }

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

Проигрывание метафайла выполняется функцией PlayMetaFile из программного интерфейса Windows, причем идентификатор метафайла берется из заголовка. Однако перед проигрыванием необходимо выполнить некоторые подготовительные действия, для чего в нашем приложении вызывается функция PrepareMetaFile.




Начало  Назад  Вперед



Книжный магазин