一 坐标系统概述
众所周知,VC中的坐标系统分为逻辑坐标和设备坐标,逻辑坐标就是内存中虚拟的坐标,我们可以理解为看不见的,而设备坐标就是跟具体的设备相联系的坐标系统,如:显示器和打印机等。不同的映射模式决定了设备坐标和逻辑坐标之间的转换关系,也就是两种坐标系统在相互转换时,逻辑单位和设备单位之间的某种比例关系。这里需要说明的是:Windows中,只有对需要设备环境句柄作参数的GDI函数,映射方式才会起作用。
对于视口和窗口的概念比较的容易混淆,其实窗口和视口是与映射模式相关联的:映射方式就是用于从"窗口"(逻辑坐标)到"视口"(设备坐标)的映射。"视口"是基于设备坐标的,通常,视口与客户区相同;"窗口"是基于逻辑坐标的,逻辑坐标可以是像素、毫米、英寸等。
下面的公式是将窗口(逻辑)坐标转化为视口(设备)坐标:
--------------------next---------------------
我们说过视口的幅度通常是屏幕客户区域的大小,而在上面的代码里我们并没有这样做。这样做可以吗?其实,在MM_TEXT的映射模式下,缺省的窗口范围和视口范围均为(1,1),从中可见,我们要设置的只是xViewExt/xWinExt的比值来决定显示比例的大小,而与xViewExt(视口范围)和xWinExt(窗口范围)的关系不大。GetDeviceCaps(LOGPIXELSX)和GetDeviceCaps(LOGPIXELSY)代表每逻辑英寸对应的水平像素点数;xLogPicPerInch/100代表每0.01逻辑单位对应的水平像素数目;那么100是什么意思呢?这就对应着每逻辑英寸对应的逻辑单位数目,也就是每逻辑单位对应于0.01逻辑英寸,有人会问,这不正是MM_LOENGLISH
方式吗?那么我们作做这样一个测试(见Demo),在OnDraw()中分别设置两种映射模式,看看到底有什么不同。
--------------------next---------------------
阅读(256) | 评论(0) | 转发(0) |