页面空间到设备空间转换

【勇芳软件工作室】汉化HomePreviousNext

页面空间到设备空间转换是原始Windows界面的一部分。该转换确定与特定DC相关联的所有图形输出的映射模式。A 【映射模式】是一个缩放变换,用于指定用于绘制操作的单位的大小。映射模式也可以执行翻译。在某些情况下,映射模式会改变设备空间中x轴和y轴的方向。映射模式如下表所示。

映射模式描述
MM_ANISOTROPIC页面空间中的每个单元都映射到设备空间中的应用程序指定单元。轴可以是或可以不是相等的缩放(例如,当在给定的设备上描绘时,在世界空间中绘制的圆可以看起来是椭圆)。轴的方向也由应用程序指定。
MM_HIENGLISH页面空间中的每个单元在设备空间中映射到0.001英寸。当你向右移动时,会增加x的值;随着你向上移动y的增加值。
MM_HIMETRIC页面空间中的每个单位在设备空间中映射到0.01毫米。当你向右移动时,会增加x的值;随着你向上移动y的增加值。
MM_ISOTROPIC页面空间中的每个单元都映射到设备空间中的应用程序定义单元。轴总是相等的。轴的方向可以由应用程序指定。
MM_LOENGLISH页面空间中的每个单元在设备空间中映射到0.01英寸。当你向右移动时,会增加x的值;随着你向上移动y的增加值。
MM_LOMETRIC页面空间中的每个单元在设备空间中映射到0.1毫米。当你向右移动时,会增加x的值;随着你向上移动y的增加值。
MM_TEXT页面空间中的每个单位映射到一个像素;也就是说,根本不执行缩放。当没有翻译有效(这是默认值)时,MM_TEXT映射模式中的页面空间等同于物理设备空间。当你向右移动时,会增加x的值;随着你向下移动,y的增加值就会发生。
MM_TWIPS页面空间中的每个单位都映射到打印机点(1/1440英寸)的二十分之一。当你向右移动时,会增加x的值;随着你向上移动y的增加值。

通过调用SetMapMode功能设置映射模式。通过调用GetMapMode函数来检索DC的当前映射模式。

页面空间到设备空间转换由从窗口和视口给出的点计算的值组成。窗口和视口各自包含一对点,一个点指定一个原点,另一个指定一个宽度和高度(称为【范围】)。窗口点是逻辑坐标;设备坐标(像素)中的视口。Windows将从窗口和视口两者的起点和扩展区组合起来,以创建转换。这意味着窗口和视口每个都指定了定义用于将页面空间中的点映射到设备空间的转换所需的一半因素。以这种方式计算的变换的效果是Windows将窗口原点映射到视口原点,并将窗口范围映射到视口范围,如下图所示。

窗口和视口范围建立在页面空间中用于设备空间转换的比例或缩放因子。对于六种预定义的映射模式(MM_HIENGLISH,MM_LOENGLISH,MM_HIMETRIC,MM_LOMETRIC,MM_TEXT和MM_TWIPS),当您调用SetMapMode时,这些扩展区由Windows设置。他们不能改变。另外两种映射模式(MM_ISOTROPIC和MM_ANISOTROPIC)需要指定扩展区。这可以通过调用SetMapMode设置适当的模式,然后调用SetWindowExtExSetViewportExtEx函数来指定扩展区。在MM_ISOTROPIC映射模式下,调用SetViewportExtEx之前调用SetWindowExtEx非常重要。

窗口和视口起源建立页面空间中使用的翻译到设备空间转换。您可以使用SetWindowOrgExSetViewportOrgEx功能设置窗口和视口来源。起源独立于扩展区,应用程序可以设置它们,而不管当前的映射模式如何。更改映射模式不影响当前设置的源(尽管它可能会影响扩展区)。起始点以当前映射模式不影响的绝对单位指定。您还可以使用OffsetWindowOrgExOffsetViewportOrgEx功能更改起始。

以下公式显示将点从页面空间转换为设备空间所涉及的数学。

Dx = ((Lx - WOx) * VEx / WEx) + VOx

涉及以下变量。

Dx x设备单位的值

逻辑单位的Lx x值(也称为页面空间单位)

WOx窗口x起点

VOX视口x起源

WEx窗口x范围

VEx视口x范围

【y】替换【x】的相同方程式转换一个点的【y】组件。

公式首先从其坐标原点偏移点。该值不再受原点偏置,然后通过扩展区的比例被缩放到目标坐标系中。最后,缩放的值被目的地起始地偏移到其最终映射。

LPtoDP DPtoLP功能可以分别用于将逻辑点转换为设备点,从设备点转换为逻辑点。