鱼C论坛

 找回密码
 立即注册
查看: 5365|回复: 2

[扩展阅读] 第025讲:逻辑单位和设备单位

[复制链接]
发表于 2015-9-4 22:38:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

所谓的逻辑单位是独立于设备的,与设备点的大小无关,是实现"所见即所得"的基础。
TextOut(hdc, x, y, TEXT("I love FishC.com!"), 17);
执行以上代码,Windows 应用程序在其客户区的 (x, y) 坐标处绘制文本,如同其他的 GDI 函数一样,这个坐标使用的是一种逻辑单位。

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

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

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

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




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-19 23:21:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-17 09:45:58 | 显示全部楼层
我在代码中设置映射模式为MM_LOMETRIC,然后用下面的代码显示字符串ABC
TextOut(hdc, 100, -100, TEXT("ABC"), 3)
但是输出的字符串左上角离客户区左上角的距离并不是100*0.1mm=10mm啊,我用尺子量了一下,大概是7mm左右,这是为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表