===========*坐标转换!逻辑坐标,物理坐标,设备坐标!*===============急!!!! 视图中利用的是影射方式 MM_ANISOTROPIC,现在想把鼠标所在的点的坐标利用逻辑坐标给标出来,是否应该利用CDC::DPTOLP(),应如何使用?另外,请问一下逻辑坐标,物理坐标和设备坐标的概念和区别。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、设备坐标是指屏幕坐标;2、逻辑坐标就是在采用非Text映射方式下的坐标系统,在这种情况下,逻辑单位被解释为不同的设备单位;3、物理坐标主要是为了保证数据精度而采用的一种坐标系统。例如:假定正在使用MM_LOENGLISH映射模式,一个逻辑单位是0.01英寸,但,在屏幕上,一英寸代表实际世界的一英尺(12英寸)(这个是自己决定的)。这个时候26.75英寸如果涣散为逻辑单位,即(26.75/12)/0.01=222.916666666...=233个逻辑单位,它必须换成设备坐标。因此,你需要把物理坐标作为浮点数存储起来,或者放大为长整数存储起来,以避免舍入错误。 对物理坐标的解释,是参考书上的解释,我也不是很清楚它具体在什么时候能用到。不好意思了!! 以上信息仅供参考,如要不对之处,欢迎各位高手指导! VC中的坐标系统分为逻辑坐标和设备坐标,逻辑坐标就是内存中虚拟的坐标,可以理解为看不见的,而设备坐标就是跟具体的设备相联系的坐标系统,如:显示器和打印机等。不同的映射模式决定了设备坐标和逻辑坐标之间的转换关系,也就是两种坐标系统在相互转换时,逻辑单位和设备单位之间的某种比例关系。这里需要说明的是:Windows中,只有对需要设备环境句柄作参数的GDI函数,映射方式才会起作用。对于视口和窗口的概念比较的容易混淆,其实窗口和视口是与映射模式相关联的:映射方式就是用于从"窗口"(逻辑坐标)到"视口"(设备坐标)的映射。"视口"是基于设备坐标的,通常,视口与客户区相同;"窗口"是基于逻辑坐标的,逻辑坐标可以是像素、毫米、英寸等。下面的公式是将窗口(逻辑)坐标转化为视口(设备)坐标: xViewport = (xWindow - xWinOrg)*xViewExt/xWinExt + xViewOrgyViewport = (yWindow - yWinOrg)*yViewExt/yWinExt + yViewOrg(xWindow,yWindow)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备坐标。 设备坐标的视口原点(xViewOrg,yViewOrg)和逻辑坐标的窗口原点(xWinOrg,yWinOrg)默认情况下均被设置成(0,0),但具体情况下可以改变;(xWinExt,yWinExt)是逻辑坐标的窗口范围;(xViewExt,yViewExt)是设备坐标的窗口范围,在多数映射方式下,范围是映射方式所隐含的,不能改变。注意:每个范围自身没有什么意义,但是视口范围和窗口范围的比是逻辑单位转换为设备单位的换算因子。例如,对于MM_LOENGLISH模式,xViewExt/xWinExt 表示每0.01英寸(一个逻辑单位)中水平像素数。 VC中的坐标系统分为逻辑坐标和设备坐标,逻辑坐标就是内存中虚拟的坐标,我们可以理解为看不见的,而设备坐标就是跟具体的设备相联系的坐标系统,如:显示器和打印机等。不同的映射模式决定了设备坐标和逻辑坐标之间的转换关系,也就是两种坐标系统在相互转换时,逻辑单位和设备单位之间的某种比例关系。这里需要说明的是:Windows中,只有对需要设备环境句柄作参数的GDI函数,映射方式才会起作用。对于视口和窗口的概念比较的容易混淆,其实窗口和视口是与映射模式相关联的:映射方式就是用于从"窗口"(逻辑坐标)到"视口"(设备坐标)的映射。"视口"是基于设备坐标的,通常,视口与客户区相同;"窗口"是基于逻辑坐标的,逻辑坐标可以是像素、毫米、英寸等。下面的公式是将窗口(逻辑)坐标转化为视口(设备)坐标: xViewport = (xWindow - xWinOrg)*xViewExt/xWinExt + xViewOrgyViewport = (yWindow - yWinOrg)*yViewExt/yWinExt + yViewOrg(xWindow,yWindow)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备坐标。 设备坐标的视口原点(xViewOrg,yViewOrg)和逻辑坐标的窗口原点(xWinOrg,yWinOrg)默认情况下均被设置成(0,0),但具体情况下可以改变;(xWinExt,yWinExt)是逻辑坐标的窗口范围;(xViewExt,yViewExt)是设备坐标的窗口范围,在多数映射方式下,范围是映射方式所隐含的,不能改变。注意:每个范围自身没有什么意义,但是视口范围和窗口范围的比是逻辑单位转换为设备单位的换算因子。例如,对于MM_LOENGLISH模式,xViewExt/xWinExt 表示每0.01英寸(一个逻辑单位)中水平像素数。 串口通信,Modbus通信中的CRC校验问题,这样写CRC校验代码正确吗? 很简单的逻辑错误吗。。。 关于模板的问题 Delphi loadlibrary问题! 请教各位大虾,如何实现ie工具栏上的Highlight功能,就像baidu,google上的一样? MFC ODBC中的一个类CRecordset:为什么我用这个类的成员函数时就ASSERT_VALID出错 如何得到音频频率? VC中编辑器的代码 如何在一个类中引用另一个类的成员变量?谢谢 新手的心声 再向各位请教一个问题,字符串转换的问题…… 一个困扰我很久的问题,关于ado 数据库连接,欢迎大家讨论
VC中的坐标系统分为逻辑坐标和设备坐标,逻辑坐标就是内存中虚拟的坐标,可以理解为看不见的,而设备坐标就是跟具体的设备相联系
的坐标系统,如:显示器和打印机等。不同的映射模式决定了设备坐标和逻辑坐标之间的转换关系,也就是两种坐标系统在相互转换时,逻辑
单位和设备单位之间的某种比例关系。这里需要说明的是:Windows中,只有对需要设备环境句柄作参数的GDI函数,映射方式才会起作用。
对于视口和窗口的概念比较的容易混淆,其实窗口和视口是与映射模式相关联的:映射方式就是用于从"窗口"(逻辑坐标)到"视口"(设备坐
标)的映射。"视口"是基于设备坐标的,通常,视口与客户区相同;"窗口"是基于逻辑坐标的,逻辑坐标可以是像素、毫米、英寸等。
下面的公式是将窗口(逻辑)坐标转化为视口(设备)坐标:
xViewport = (xWindow - xWinOrg)*xViewExt/xWinExt + xViewOrg
yViewport = (yWindow - yWinOrg)*yViewExt/yWinExt + yViewOrg
(xWindow,yWindow)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备坐标。
设备坐标的视口原点(xViewOrg,yViewOrg)和逻辑坐标的窗口原点(xWinOrg,yWinOrg)默认情况下均被设置成(0,0),但具体情况下可以改变;
(xWinExt,yWinExt)是逻辑坐标的窗口范围;(xViewExt,yViewExt)是设备坐标的窗口范围,在多数映射方式下,范围是映射方式所隐含的,
不能改变。注意:每个范围自身没有什么意义,但是视口范围和窗口范围的比是逻辑单位转换为设备单位的换算因子。例如,
对于MM_LOENGLISH模式,xViewExt/xWinExt 表示每0.01英寸(一个逻辑单位)中水平像素数。
VC中的坐标系统分为逻辑坐标和设备坐标,逻辑坐标就是内存中虚拟的坐标,我们可以理解为看不见的,而设备坐标就是跟具体的设备相联系
的坐标系统,如:显示器和打印机等。不同的映射模式决定了设备坐标和逻辑坐标之间的转换关系,也就是两种坐标系统在相互转换时,
逻辑单位和设备单位之间的某种比例关系。这里需要说明的是:Windows中,只有对需要设备环境句柄作参数的GDI函数,映射方式才会起作用。
对于视口和窗口的概念比较的容易混淆,其实窗口和视口是与映射模式相关联的:映射方式就是用于从"窗口"(逻辑坐标)到"视口"(设备坐标)
的映射。"视口"是基于设备坐标的,通常,视口与客户区相同;"窗口"是基于逻辑坐标的,逻辑坐标可以是像素、毫米、英寸等。
下面的公式是将窗口(逻辑)坐标转化为视口(设备)坐标:
xViewport = (xWindow - xWinOrg)*xViewExt/xWinExt + xViewOrg
yViewport = (yWindow - yWinOrg)*yViewExt/yWinExt + yViewOrg
(xWindow,yWindow)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备坐标。
设备坐标的视口原点(xViewOrg,yViewOrg)和逻辑坐标的窗口原点(xWinOrg,yWinOrg)默认情况下均被设置成(0,0),但具体情况下可以改变;
(xWinExt,yWinExt)是逻辑坐标的窗口范围;(xViewExt,yViewExt)是设备坐标的窗口范围,在多数映射方式下,范围是映射方式所隐含的,
不能改变。注意:每个范围自身没有什么意义,但是视口范围和窗口范围的比是逻辑单位转换为设备单位的换算因子。
例如,对于MM_LOENGLISH模式,xViewExt/xWinExt 表示每0.01英寸(一个逻辑单位)中水平像素数。