当前位置:鱼C工作室 >Windows程序设计 > 查看文章

自定义的映射模式 – Windows程序设计(SDK)028

自定义的映射模式

 

让编程改变世界

Change the world by program


 

前边我们说完了视口和窗口的原点映射,接下来我们说说视口范围和窗口范围,也就是 ViewExt 和 WinExt 这两个。

对于 MM_TEXT 映射模式来说,窗口是这么转换为视口的:

1

MM_TEXT 的视口范围和窗口范围是都是约定为 1,因此视口和窗口之间并没有任何缩放的操作:

2

 

而对于 MM_LOMETRIC 映射模式来说,窗口也是这么转换为视口的:

1

那在这里,视口范围 ViewExt 除以窗口范围 WinExt 的含义就是每一个逻辑单位应该对应多少像素:

3

 

总之,除了 MM_TEXT 映射模式外,其他几个我们学过的映射模式,视口范围除以窗口范围,得到的都是每个逻辑单位应该对应多少个像素。但是,我们目前接触过的这些映射模式,无论是视口范围,或者窗口范围,我们都是无法修改的。

 

但是呢,我们还有两个映射模式还没有介绍呢,而他们则允许修改视口范围 ViewExt 和窗口范围 WinExt 的值,也就是说只有 MM_ISOTROPIC 和 MM_ANISOTROPIC 这两种映射模式才允许你修改视口和窗口的范围。

ISOTROPIC 和 ANISOTROPIC 是两个物理术语,称为各向同性和各向异性。各向同性指物体的物理、化学等方面的性质不会因方向的不同而有所变化的这么一个特性,反之,物体如果在不同方向上的性能不同,则称之为各向异性。

 

那么在 Windows 这里,各向同性和各向异性指的是什么呢?

MM_ISOTROPIC 也就是各向同性,它会同比例地缩放两个坐标轴,使得 x 轴上的逻辑单位与 y 轴上的逻辑单位表示的物理尺寸是相同的。对于建立宽高比与显示设备无关的图像,这是很有帮助的。

 

窗口与视口之间的缩放范围,是通过同时设置 WinExt 和 ViewExt 来实现的。它们的值由 SetWindowExtEx 和 SetViewportExtEx 函数设置。不过这里要注意的是,应当在调用 SetViewportExtEx 函数之前先调用 SetWindowExtEx 函数。也就是先设置窗口范围,再设置视口范围,这样才能最有效地使用客户区空间。

 

…… 此处省略N多内容,具体请看视频讲解 ……

 

注意,这个 MM_ISOTROPIC 映射模式的作用就是确保窗口的范围比例可以完全映射到视口上。因为视口是随着客户区的变化而变化的,因此,Windows 随时会通过裁剪视口的范围,使得窗口可以按比例的完整的映射到视口上。那 MM_ISOTROPIC 你理解了,MM_ANISOTROPIC 映射模式就非常简单了:在 MM_ANISOTROPIC 映射模式下,Windows 不会做任何干预。

 

– 【API档案】SetWindowExtEx

– 【API档案】SetViewportExtEx


为您推荐

报歉!评论已关闭.