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

Свежая информация ротек здесь.

Чтение метафайла - часть 2


Прежде всего, эта функция устанавливает контекст отображения, указанный в заголовке метафайла, вызывая функцию SetMapMode:

void PrepareMetaFile(HDC hdc, LPMETAFILEPICT lpmfp, int cxClient, int cyClient) { int x, y;

SetMapMode(hdc, lpmfp->mm);

if(lpmfp->mm == MM_ISOTROPIC lpmfp->mm == MM_ANISOTROPIC) { if(lpmfp->xExt == 0) SetViewportExtEx(hdc, cxClient, cyClient, NULL);

else if(lpmfp->xExt > 0) { x = lpmfp->xExt; y = lpmfp->yExt; HiMetricToSize(&x, &y); SetViewportExtEx(hdc, x, y, NULL); }

else if(lpmfp->xExt < 0) { x = -lpmfp->xExt; y = -lpmfp->yExt; HiMetricToSizeScaled(&x, &y, cxClient, cyClient); SetViewportExtEx(hdc, x, y, NULL); } } else SetViewportExtEx(hdc, lpmfp->xExt, lpmfp->yExt, NULL); }

Далее для изотропного и анизотропного режимов отображения анализируется содержимое полей xExt и yExt заголовка метафайла с целью выбора размеров изображения в контексте отображения.

Если в заголовке метафайла размеры изображения не указаны (равны нулю), функция PrepareMetaFile устанавливает размер изображения, равным размеру внутренней области окна (размеры окна передаются функции через параметры).

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

Если же размеры изображения, указанные в заголовке метафайла, меньше нуля, функция PrepareMetaFile изменяет их знак на положительный. Затем она выполняет преобразование с учетом размеров внутренней области окна, используемого для отображения. Функция HiMetricToSizeScaled масштабирует изображение таким образом, чтобы при любом размере окна изображение помещалось в него целиком и чтобы при этом сохранялось правильное отношение ширины и высоты изображения (указанное в заголовке метафайла).

Исходные тексты функций HiMetricToSize и HiMetricToSizeScaled приведены ниже в разделе "Приложение CLIPSHOW".

Если же в заголовке метафайла указан режим отображения, отличный от изотропного или анизотропного, размеры изображения устанавливаются равными значениям, указанным в заголовке.




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



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