Составители:
MM_ISOTROPIC
или MM_ANISOTROPIC, функция просто завершает свою
работу, не выполняя никаких действий.
Если режим отображения является изотропным или анизотропным,
функция CreateMapMode должна осуществить дополнительные операции. Во-
первых, вызывается функция GetDeviceCaps, которая возвращает
горизонтальный и вертикальный размеры экрана, а также разрешение.
nHRes = GetDeviceCaps( hdc, HORZRES ) ;
nVRes = GetDeviceCaps( hdc, VERTRES ) ;
nHSize = GetDeviceCaps( hdc, HORZSIZE );
nVSize = GetDeviceCaps( hdc, VERTSIZE ) ;
Последующие действия зависят от значений полей xExt и yExt, которые
могут быть положительными, отрицательными или нулевыми.
Если размеры полей заданы посредством положительных значений, они
воспринимаются как рекомендуемые размеры изображения в единицах
MM_HIMETRIC.
В этом случае вызывается функция SetViewportExtEx, которая
соответствующим образом задает размеры области просмотра.
if( lpMFP->xExt > 0 )
SetViewportExtEx( hdc,(int)((long) lpMFP->xExt * nHRes /
nHSize / 100 ), (int)((long) lpMFP->yExt * nHRes /
nHSize / 100 ), NULL );
Если указаны отрицательные значения, содержимое полей
интерпретируется как масштабный коэффициент. Поэтому сначала
производится расчет масштаба по отношению к контексту устройства.
else
if( lpMFP->xExt < 0 )
{
lMapScale = min( ( 100L * (long) cxWnd * nHSize / nHRes /
-lpMFP->xExt ), (100L * (long) cyWnd * nVSize /
nVRes /-lpMFP->yExt ) );
Вычисляются два масштаба: по оси Х и по оси Y. Однако в качестве
значения lMapScale берется меньшая из двух величин, чтобы результирующее
изображение точно помещалось на экране. Теперь функция SetViewportExtEx
вызывается еще раз - для согласования размеров изображения и области
просмотра.
SetViewportExtEx( hdc,(int)((long) -lpMFP->xExt * lMapScale * nHRes /
nHSize / 100 ),(int)((long) -lpMFP->yExt * lMapScale * nVRes /
nVSize / 100 ), NULL ); }
40
MM_ISOTROPIC или MM_ANISOTROPIC, функция просто завершает свою работу, не выполняя никаких действий. Если режим отображения является изотропным или анизотропным, функция CreateMapMode должна осуществить дополнительные операции. Во- первых, вызывается функция GetDeviceCaps, которая возвращает горизонтальный и вертикальный размеры экрана, а также разрешение. nHRes = GetDeviceCaps( hdc, HORZRES ) ; nVRes = GetDeviceCaps( hdc, VERTRES ) ; nHSize = GetDeviceCaps( hdc, HORZSIZE ); nVSize = GetDeviceCaps( hdc, VERTSIZE ) ; Последующие действия зависят от значений полей xExt и yExt, которые могут быть положительными, отрицательными или нулевыми. Если размеры полей заданы посредством положительных значений, они воспринимаются как рекомендуемые размеры изображения в единицах MM_HIMETRIC. В этом случае вызывается функция SetViewportExtEx, которая соответствующим образом задает размеры области просмотра. if( lpMFP->xExt > 0 ) SetViewportExtEx( hdc,(int)((long) lpMFP->xExt * nHRes / nHSize / 100 ), (int)((long) lpMFP->yExt * nHRes / nHSize / 100 ), NULL ); Если указаны отрицательные значения, содержимое полей интерпретируется как масштабный коэффициент. Поэтому сначала производится расчет масштаба по отношению к контексту устройства. else if( lpMFP->xExt < 0 ) { lMapScale = min( ( 100L * (long) cxWnd * nHSize / nHRes / -lpMFP->xExt ), (100L * (long) cyWnd * nVSize / nVRes /-lpMFP->yExt ) ); Вычисляются два масштаба: по оси Х и по оси Y. Однако в качестве значения lMapScale берется меньшая из двух величин, чтобы результирующее изображение точно помещалось на экране. Теперь функция SetViewportExtEx вызывается еще раз - для согласования размеров изображения и области просмотра. SetViewportExtEx( hdc,(int)((long) -lpMFP->xExt * lMapScale * nHRes / nHSize / 100 ),(int)((long) -lpMFP->yExt * lMapScale * nVRes / nVSize / 100 ), NULL ); } 40
Страницы
- « первая
- ‹ предыдущая
- …
- 38
- 39
- 40
- 41
- 42
- …
- следующая ›
- последняя »