5
使用。若以窗口的用户区为范围,点(0 , 0 )位于用户区的左上角,这种坐标称为用户区
坐标,这是最常用的一种设备坐标。函数 ClientToScreen( )和 ScreenToClient ( )可以将用户
区坐标转换为屏幕坐标,或者将屏幕坐标转换为用户区坐标。
7 . 3. 2 逻辑坐标
如果直接使用设备坐标绘图,由于屏幕和打印机的分辨率不同,同样是 100 个像素长
的一条直线,在两种设备上的实际输出长度将不相同。假设程序员想画一条在两种设备上
都是 10cm 长的直线,将不得不针对屏幕和打印机的分辨率分别计算它们各需要包含多少
个设备像素。为了解决这个问题,在 GDI 绘图中使用了逻辑坐标这一概念。逻辑坐标使用
的是逻辑单位,逻辑单位与设备无关,比如逻辑单位是 0.lmm ,则一条 100 个逻辑单位长
的直线,不论是显示在屏幕上,还是输出到打印机上,都是 10cm 长。虽然最终显示或打
印时仍然要使用像素点(设备坐标),但一个逻辑单位应该映射为物理设备上的多少个像
素点,是由 Windows 自动处理的。
本章后面几小节介绍的 GDI 绘图函数使用的都是逻辑坐标。
7 . 3. 3 映射模式
映像模式定义了将逻辑单位转化为设备的度量单位的方法以及设备的 X 方向和 Y 方向,
程序员可在一个统一的逻辑坐标系中操作而不必考虑输出设备的坐标系情况。映射模式对
应用程序是很重要的。Windows 中定义了 8 种映射模式,如表 7-3 所示。
表 7-3 映射模式
映射模式 将一个逻辑单位映射为 X 轴增长方向 Y 轴增长方向
MM_TEXT 1 像素 向右 向下
MM_LOMETRIC 0.1 毫米 向右 向上
MM_HIMETRIC 0.01 毫米 向右 向上
MM_LOENGLISH 0.01 英寸 向右 向上
MM_HIENGLISH 0.001 英寸 向右 向上
MM_TWIPS 1/1440 英寸 向右 向上
MM_ISOTROPIC 任意(X=Y) 可选 可选
MM_ANISOTROPIC 任意(X!=Y) 可选 可选
MM _ TEXT 是最简单的一种映射模式,也是默认的映射模式,它使得逻辑坐标完全
等价于设备坐标。其他几种映射模式下,逻辑坐标的原点也位于窗口的左上角,但对于 Y
轴是向下增长的。
MM_ANISOTROPIC 和 MM_ISOTROPIC 这两种映射模式通过将图形从程序员定义的
逻辑坐标窗口映射到物理设备的视口以实现坐标转换。窗口是对应逻辑坐标系上程序员设
定的区域,视口是对应实际输出设备上程序员设定的区域。这两种映射模式的区别是
MM_ANISOTROPIC 按照窗口和视口的坐标比例进行映射,而 MM_ISOTROPIC 将窗口中
的对称图形映射到视口时仍为对称图形。在 MM_ISOTROPIC 映射模式下,圆总是圆的,
但是在 MM_ANISOTROPIC 映射模式下,圆可以被拉扁成椭圆形状。
1、映射模式的设置