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


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


// Определяем количество пикселов в логическом // дюйме по горизонтали и по вертикали int dpiX = GetDeviceCaps(hDC, LOGPIXELSX); int dpiY = GetDeviceCaps(hDC, LOGPIXELSY);

// Константа для преобразования const long HiMetricPerInch = 2540;

// Выполняем преобразование if(width) *width = int(*width * HiMetricPerInch / dpiX); if(height) *height = int(*height * HiMetricPerInch / dpiY);

ReleaseDC(0, hDC); } // ===================================== // Функция HiMetricToSize // ===================================== void HiMetricToSize(int *width, int *height) { HDC hDC = GetDC(0); long int dpiX = GetDeviceCaps(hDC, LOGPIXELSX); long int dpiY = GetDeviceCaps(hDC, LOGPIXELSY); const long HiMetricPerInch = 2540;

if(width != NULL) *width = int(*width * dpiX / HiMetricPerInch); if(height != NULL) *height = int(*height * dpiY / HiMetricPerInch);

ReleaseDC (0, hDC); } // ===================================== // Функция HiMetricToSizeScaled // ===================================== void HiMetricToSizeScaled (int *width, int *height, int cxClient, int cyClient) { HDC hDC = GetDC(0); long int dpiX = GetDeviceCaps(hDC, LOGPIXELSX); long int dpiY = GetDeviceCaps(hDC, LOGPIXELSY); const long HiMetricPerInch = 2540; int xPic, yPic;

// Определяем размеры в пикселах if (width != NULL) xPic = int(*width * dpiX / HiMetricPerInch); if (height != NULL) yPic = int(*height * dpiY / HiMetricPerInch);

// Сравниваем коэффициенты масштабирования // по горизонтали и вертикали if((cxClient*100L) / xPic > (cyClient*100L) / yPic) { // Если коэффициент масштабирования по // горизонтали больше, масштабируем // по горизонтали xPic = ((long)xPic * cyClient) / (long)yPic; yPic = cyClient; } else { // Иначе масштабируем по вертикали yPic = ((long)cxClient * yPic) / (long)xPic; xPic = cxClient; } ReleaseDC (0, hDC);

// Новые размеры *width = xPic; *height = yPic; }

Функция WinMain допускает запуск только одной копии приложения. Вы можете убрать это ограничение, однако в этом случае вам нужно будет предусмотреть способ раздельного хранения (для каждой копии приложения) идентификаторов палитр hPal и hOldPal.


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



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