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


Листинг 2.7. Файл clipshow/clipshow.cpp - часть 4


hMemDC = CreateCompatibleDC(hDC); hOldbm = (HBITMAP)SelectObject(hMemDC, hBitmap); if (hOldbm) { SetMapMode(hMemDC, GetMapMode(hDC)); GetObject(hBitmap, sizeof(BITMAP), (LPSTR) &bm);

ptSize.x = bm.bmWidth; // ширина ptSize.y = bm.bmHeight; // высота DPtoLP(hDC, &ptSize, 1);

ptOrg.x = 0; ptOrg.y = 0; DPtoLP(hMemDC, &ptOrg, 1);

BitBlt(hDC, x, y, ptSize.x, ptSize.y, hMemDC, ptOrg.x, ptOrg.y, SRCCOPY); SelectObject(hMemDC, hOldbm); } DeleteDC(hMemDC); } // ===================================== // Функция PrepareMetaFile // ===================================== void PrepareMetaFile(HDC hdc, LPMETAFILEPICT lpmfp, int cxClient, int cyClient) { int x, y;

// Устанавливаем такой режим отображения, // какой указан в заголовке метафайла SetMapMode(hdc, lpmfp->mm);

// Для изотропного и анизотропного режима // анализируем поля xExt и yExt заголовка if(lpmfp->mm == MM_ISOTROPIC lpmfp->mm == MM_ANISOTROPIC) { // Если xExt равен нулю, устанавливаем // размеры изображения равными размерам // внутренней области окна if(lpmfp->xExt == 0) SetViewportExtEx(hdc, cxClient, cyClient, NULL);

// Если xExt больше нуля, устанавливаем // размеры изображения в соответствии со значениями, // указанными в заголовке метафайла else if(lpmfp->xExt > 0) { x = lpmfp->xExt; y = lpmfp->yExt;

// Выполняем преобразование из // сотых долей мм в пикселы HiMetricToSize(&x, &y); SetViewportExtEx(hdc, x, y, NULL); }

// Если xExt меньше нуля, сохраняем масштаб // изображения, разрешая изменения размеров 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); } // ===================================== // Функция SizeToHiMetric // ===================================== void SizeToHiMetric(int *width, int *height) { HDC hDC = GetDC(0);




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



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