⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_43891.htm

📁 vc
💻 HTM
字号:
<p>
序号:43891 发表者:wangyangyi 发表日期:2003-06-14 19:50:13
<br>主题:一直搞不通windows中的坐标,请高手指教
<br>内容:从msdn中说明,windows中有四类坐标,分别为 world, page, device, and physical device,他们有什么区别,什么关系,特别是world(世界坐标)和page(页坐标)。<BR>vc++定义的XFORM参数是在哪类坐标的映射中发挥作用,当设定高级绘图方式时(&nbsp;&nbsp;&nbsp;&nbsp;SetGraphicsMode(pDC-&gt;m_hDC,GM_ADVANCED);SetWorldTransform(pDC-&gt;m_hDC,&amp;m_CurXFORM);)后,cdc自带的坐标转换函数CDC::LPTODP()是按照哪一个参数转换,XFORM如何发挥作用?真是搞不清楚,苦恼之极,请一定指教.先谢谢了。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:counter-bug 回复日期:2003-06-17 17:39:45
<br>内容:我说的仅供参考。<BR>坐标只有3种:world, page, and device<BR>world 坐标是是理论上的坐标,原点任意,无单位的<BR>page 是打印时用的,图纸坐标,以图纸做上角为原点的,单位(mm.之类的)<BR>device 是我们显示的坐标也是以左上角为原点,单位象素<BR>world坐标原点可在page,device坐标系任何一个位置<BR>可以认为page,和device 只是个比例不同的坐标系<BR><BR>据我所知,LPTODP是和SetWindowOrg有关的
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wangyangyi 回复日期:2003-06-19 20:16:26
<br>内容:可是vc中还有logical coordinates(逻辑坐标),vc中CDC类成员函数坐标一般均为logical coordinates,这时,world 坐标如何与logic坐标转换?或者,按照你的说法,world=logical ? 
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:counter-bug 回复日期:2003-06-20 11:02:39
<br>内容:sorry, 原来的解释完全不对,对给你可能造成的误导表示抱歉。<BR><BR>坐标有四种:world, page, device, and physical device<BR>其中world 只支持NT/2000/XP<BR>world , page 统称为 logical<BR><BR>world 坐标与 page 坐标相似,通常没有单位(也可以有,不过只有我们自己知道,系统不知道)<BR><BR>device 坐标和接受显示信息的设备有关(显示器,打印机),单位可为mm之类。<BR><BR>physical device 就和具体设备硬件有关了,我们可以不去管它,:)。<BR><BR>通常,我们要在显示器上显示一个图形如LineTo(0,100),这里的(0,100)是 page坐标。系统会根据输出设备不同进行转换(我们也可以设置它,SetMapMode),将其转换成(0,100),单位是像素。然后,在转换成physical device 给显示器,显示输出。<BR><BR>我们可以在page前在一次转换,已达到我们要求(如缩放,旋转..)这就要用到world。 要用到world,必须要用到SetGraphicsMode(GM_ADVANCED)(通知系统提供world支持)和SetWorldTransform(XForm)(通知系统怎样转换)。XForm就决定了如何转换。<BR>XFrom 根据你要转换的形式,参数不同,可看MSDN<BR><BR>不知道这样讲,你明白了没有。<BR>再次对上次给你一个错误答案表示抱歉。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:风雷 回复日期:2003-06-20 22:14:09
<br>内容:说得很好,不过有点多,我要慢慢理解了!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:风雷 回复日期:2003-06-21 13:38:38
<br>内容:老兄你可以在《vc++程序设计》(清华大学出版社)去查查看<BR>里面有关于windows坐标介绍的!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wangyy 回复日期:2003-06-21 16:13:32
<br>内容:有点明白了。但是还有一个问题:当设置高级绘图模式(SetGraphicsMode(GM_ADVANCED),SetWorldTransform(XForm)(通知系统怎样转换))后,在调用CDC::LPTODP()or CDC::DPTOLP()时,系统是否实际上进行了两次的转换,第一次从world coordinates---&gt;logical coordinates,第二次logical coord ----&gt;device coord?,第一次的转换按照SetGraphicsMode(GM_ADVANCED),SetWorldTransform(XForm)完成转换,第二次按照SetMapMode()完成?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:counter-bug 回复日期:2003-06-24 12:17:50
<br>内容:对,就是那样先按SetWorldTransform(XForm)完成转换,再按SetMapMode()完成
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -