什么是映射模式呢?为了说清楚这个概念,我们先介绍两个名词:“窗口”、“视口”。
视口是基于设备坐标的。对于显示器,就是像素的,也就是你看到的。而窗口是基于逻辑坐标的,虚拟的,也是你写程序时使用的。而且与你当前拿到的设备描述表有关,一般通过beginPaint拿到的都是客户区;而使用getDC拿到的则是通常意义下的窗口:客户区+菜单栏+工具栏+标题栏等等。
而窗口到视口的坐标映射,就是映射模式。用数学公式表述为:
窗口到视口:
xViewport = (xWindow-xWinOrg)*xViewExt/xWinExt+xViewOrg
yViewport = (yWindow-yWinOrg)*yViewExt/yWinExt+yViewOrg
其中 xViewExt表示的是视口的横坐标范围,xWinExt表示的是窗口的横坐标范围,通常我们关心的不是它们的具体值,而是二者的比例。
windows提供了8种映射模式
映射方式 |
逻辑单位 |
增加值 |
|
x值 |
y值 |
||
MM_TEXT |
图素 |
右 |
下 |
MM_LOMETRIC |
0.1 mm |
右 |
上 |
MM_HIMETRIC |
0.01 mm |
右 |
上 |
MM_LOENGLISH |
0.01 in. |
右 |
上 |
MM_HIENGLISH |
0.001 in. |
右 |
上 |
MM_TWIPS |
1/1440 in. |
右 |
上 |
MM_ISOTROPIC |
任意(x = y) |
可选 |
可选 |
MM_ANISOTROPIC |
任意(x != y) |
可选 |
可选 |
这8种模式通常分为3大类:MM_TEXT、“度量”映射方式、“自作主张”的映射方式。下面对他们一一进行介绍:
MM_TEXT