小甲鱼 发表于 2015-9-4 22:38:17

第025讲:逻辑单位和设备单位

在学习编程绘图时,童鞋们经常遇到的问题就是:什么是逻辑单位(logical unit),什么又是设备单位(device unit)?它们又有什么关系呢?

小甲鱼在这里统一帮大家解答一下:

所谓的逻辑单位是独立于设备的,与设备点的大小无关,是实现"所见即所得"的基础。

TextOut(hdc, x, y, TEXT("I love FishC.com!"), 17);
执行以上代码,Windows 应用程序在其客户区的 (x, y) 坐标处绘制文本,如同其他的 GDI 函数一样,这个坐标使用的是一种逻辑单位。

当 GDI 函数将输出送到某个物理设备上时,Windows 必须将逻辑坐标转换成设备单位(如显示器的像素点)。

逻辑单位和设备单位的转换是由映射模式决定的,映射模式被储存在设备环境中。

每个逻辑单位的大小由映射模式决定,这个逻辑单位既可以与设备单位(显示器的一个像素点)相同,也可以是一种物理单位(如 1 毫米),还可以是用户自定义的一种单位。在 Windows 应用程序中,只要与输出有关系,都要使用映射模式。

GetMapMode 函数用于从设备环境得到当前的映射模式,SetMapMode 函数用于设置设备环境的映射模式。




fishermanmax 发表于 2017-1-19 23:21:29

{:10_245:}

_zgj 发表于 2017-6-17 09:45:58

我在代码中设置映射模式为MM_LOMETRIC,然后用下面的代码显示字符串ABC
TextOut(hdc, 100, -100, TEXT("ABC"), 3)
但是输出的字符串左上角离客户区左上角的距离并不是100*0.1mm=10mm啊,我用尺子量了一下,大概是7mm左右,这是为什么?
页: [1]
查看完整版本: 第025讲:逻辑单位和设备单位