《Windows程序设计》第5章

MM_ISOTROPIC模式详解
本文详细介绍了在MM_ISOTROPIC模式下如何通过SetViewportExtEx和SetWindowExtEx函数设置视口和窗口范围,并解释了逻辑坐标单位与设备坐标单位之间的换算因子计算方法。

换算因子:xViewExt/xWinExt
MM_ISOTROPIC
将映像方式设定为MM_ISOTROPIC时,Windows使用与MM_LOMETRIC同样的窗口和视端口范围。
MM_ISOTROPIC模式下的SetViewportExtEx函数中,Windows将自动调整x与y的值,以确保X轴与Y轴逻辑坐标单位相同。Windows不会调整SetWindowExtEx。
逻辑坐标单位为1/16英寸:
SetMapMode(hdc, MM_ISOTROPIC);
SetWindowExtEx(hdc, 160 * GetDeviceCaps(hdc, HORZSIZE) / 254, 160 * GetDeviceCaps(hdc, VERTSIZE) / 254, NULL);
SetViewportExtEx(hdc, GetDeviceCaps(hdc, HORZRES), GetDeviceCaps(hdc, VERTRES), NULL);
视口范围设定为按像素计算的整个屏幕大小,窗口范围则必须设定为以1/16英寸为单位的整个屏幕大小。GetDeviceCaps以HORZSIZE和VERTSIZE为参数,传回以毫米为单位的设备尺寸。如果使用浮点数,将把毫米数除以25.4,转换为英寸,然后,再乘以16以转换为1/16英寸。但是,由于我们使用的是整数,所以先乘以160,再除以254。
换算因子的计算公式如下:
GetDeviceCaps(hdc, HORZRES) / (160 * GetDeviceCaps(hdc, HORZSIZE) / 254)
GetDeviceCaps(hdc, VERTRES) / (160 * GetDeviceCaps(hdc, VERTSIZE) / 254)
当逻辑坐标与设备坐标转换时,Windows将以此换算因子进行转换。
SetWindowExtEx与SetViewportExtEx仅用来改变换算因子。(改变逻辑坐标单位的尺寸)
MM_ANISOTROPIC
SIZE size;
SetMapMode(hdc, MM_LOENGLISH);
SetMapMode(hdc, MM_ANISOTROPIC);
GetViewportExtEx(hdc, &size); // size.cx = 1024,size.cy = -768
SetViewportExtEx(hdc, size.cx, -size.cy, NULL); // -size.cy 改变Y轴方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值