关于这两个函数在网上查了几篇文章,说法不完全一样,经过一些代码实验现将自己的理解记录如下:
首先引入概念:页面空间到设备空间的转换所用的是两个矩形的宽与高的比率(转换因子),其中页面空间中的矩形被称为窗口(使用逻辑坐标),设备空间中的矩形被称为视口(使用设备坐标),Windows把窗口原点映射到视口原点,把窗口范围映射到视口范围,就完成了这种转换[1]。
在下认为上面红色字体所说的映射转换是Windows自动实现的,程序员需要做的工作就是设定好原点坐标、窗口尺寸和映射模式。
几乎在所有GDI函数中使用的坐标值都是逻辑坐标,Windows对所有的消息、所有的非GDI函数和个别GDI函数(例如GetGeviceCaps函数)采用设备坐标[1]。
逻辑坐标是系统用作记录的坐标[2],是一个抽象的平面坐标系,它的x轴和y轴方向以及坐标单位由映射模式和相关参数设置决定。
设备坐标是指输出设备上的坐标(如屏幕),以像素为单位,x轴向右为正,y轴向下为正[2]。
注:关于设备坐标的方向,孙鑫的《VC++深入详解》中也是说x轴向右为正,y轴向下为正。但是在下通过程序实验发觉有不同的解释,具体见下面的例子。
1. 关于逻辑原点和设备原点
网易博主embeded