这个简单的问题 ,困扰我很长时间

rfa20 2000-05-03 03:02:00
设备坐标是指显示器的象素,如:我的显示器的分辨率是1024*768
那么显示器的最右下脚的设备坐标就是(1024,768)

CRect m=CRect(0,0,100,-50);
dc.SetMapMode(MM_LOENGLISH);
dc.Rectangle(m); 中的100和50的单位就是象素(即设备坐标)。

那么逻辑坐标到底是什么(不同的高手对它有不同的认识,让我很迷惑)?

经过下面的语句执行
dc.DPtoLP(m);

会变成什么样? 逻辑坐标和设备坐标的转换又是怎么回事?

我的认识对不对,请各位高手对我的问题作出详细的讲解! 非常感谢

(请您千万别告诉我这个问题以前回答过,我看了很多解答还是不太明白,拜托了)
...全文
311 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ren20 2000-05-04
  • 打赏
  • 举报
回复
hi
ad 2000-05-04
  • 打赏
  • 举报
回复
设备坐标指象素,没错!但1024x768分辨率下右下角坐标不是(1024,768),而是(1023,767)。

对于Rectangle(...)等函数中用到的坐标或距离的单位未必是象素,与窗口的坐标系有关(用SetMapMode(...)设置),只有MM_TEXT坐标系统下,一个逻辑单位才等于一个设备单位,即象素,其它坐标系统下,一个逻辑单位相当于多个或零点几个象素。当然,在windows实际向屏幕输出的时候,总是要将逻辑单位换算成设备单位(象素)的。

另外,不同的坐标系统下,坐标原点在屏幕或窗口中的位置和y轴的方向是不同的,大多数情况下,y轴向上,但坐标原点在窗口左上角.
江王 2000-05-04
  • 打赏
  • 举报
回复
其实可以这么看待这个问题,可以把显示看着一个平面。我们可以在这个平面上自由地建立任意套坐标系统,而Windows给了我们五套标准的坐标系,另外又提供了两种自定义的坐标系(即坐标单位由用户自己来定义). 其中MM_Text坐标系的单位和显示器的像素间距一致,因此它是最自然的一种坐标系,称物理坐标系,其它的坐标系都可以说是相对于它来定义的,称逻辑坐标系。
至于坐标系间坐标的变换这是一个数学问题,学过平面几何的对这个应该不会陌生,只要知道各个坐标系的定义,自己推算起来也是一件很简单的事情。
Windows的API LpToDp和DpToLp就是来做MM_Text坐标系(Dp)与其它几种坐标系(Lp)之间坐标的换算的。
Sniper 2000-05-03
  • 打赏
  • 举报
回复
你找本书看看吧。推荐《Visual C++技术内幕》,清华大学。
rosement 2000-05-03
  • 打赏
  • 举报
回复
逻辑坐标简单的说就是你自己定义的坐标,而你刚才讲的也是有问题的,在WINDOWS中,设备坐标指的是MM_TEXT模式,那时侯你的设备坐标的最右下角才是最大的坐标系,而在其他的模式下,都有不同。
而对于DC.DPtoLp函数的核心是将设备坐标转换为逻辑坐标,就是你的设备坐标在画图时在坐标上显示的位置,而另一个函数LPTODP刚好相反,其实你只要知道,各个坐标,如果要判断点的位置,一定用设备坐标,画图一定用逻辑坐标。
其实你可以具体参考一本书:《VISUAL C++ 技术内幕》。
rfa20 2000-05-03
  • 打赏
  • 举报
回复

我看过《Visual C++技术内幕》,清华大学。

可还是有些不懂,和各位高手说的不同。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧