逻辑坐标与物理坐标.docxVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
逻辑坐标与物理坐标

谢谢fuban(蚹蝂) 和yqfu(浩然正气) ,我已经弄明白了,下面是我的理解,把它贴出来请大家指教,因为这个问题使我迷糊了整整一天,所以我暂时不结帖,把它放在论坛里让有同样迷惑的同好看一看。如果理解有错误,千万请指正出来,以免误人子弟。谢谢:-------------------- 在P171面的解释是针对当时的一个确定数32767,因为Windows 98是16位,所以坐标的值最高不超过32767,因此书里说 Windows 98不允许在客户区超越轴的范围之外显示任何东西 。而在下面这段代码中:SetMapMode(hdc,MM_ANISOTROPIC); SetWindowExtEx(hdc,1,1,NULL); SetViewportExtEx(hdc,cxChar,cyChar,NULL); TextOut(hdc,3,2,TEXT( Hello ),5); 由于TextOut的坐标值是3和2,在Windows98允许的范围32767之内,所以还是可以显示出 Hello 字符串。又因为程序把窗口的范围定义为1,而视口的范围定义为cxChar和cyChar(字符的平均宽度和平均高度),因此在显示时,Windows会在(3*(cxChar/1),2*(cyChar/1))的地方(也就是第二行的第三个字符处)显示字符串 Hello 。我们通过改一改数值来证明一下:SetMapMode(hdc,MM_ANISOTROPIC); SetWindowExtEx(hdc,4,4,NULL); //设窗口范围为4个逻辑单位SetViewportExtEx(hdc,8,8,NULL); //设视口范围为8个物理单位(也就是8个像素) TextOut(hdc,1,1,TEXT( Hello ),5); //在坐标(1,1)处显示 Hello 从上面的代码我们得出X轴的逻辑与物理比值为2,Y轴的逻辑与物理比值也为2,1*(8/4)=2,因此,Windows事实上会在客户区的左上角往右2个像素、往下2个像素的地方显示 Hello 。我们仍然可以把TextOut中的值进行修改:TextOut(hdc,10,10,TEXT( Hello ),5); 10明显超出了我们定义的逻辑范围4,但是因为它并没有超过坐标值的上限32767,因此,10*(8/4)=20,Windows仍然会在客户区的左上角往右20个像素、往下20个像素的地方显示 Hello 。实例如下:::VC中坐标系的建立逻辑坐标,物理坐标,设备坐标建立一个合适的坐标系可以为我们的绘图带来很大的方便。下面介绍一下如何在VC中建立我们想要的坐标系。  一设备坐标和逻辑坐标  设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象的位置,是以像素为单位来表示的,设备坐标的X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。  逻辑坐标(Logical Coordinate)是系统用作记录的坐标。在缺省的模式(MM_TEXT)下,逻辑坐标的方向和单位与设备坐标的方向和单位相同,也是以像素为单位来表示的,X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。逻辑坐标和设备坐标即使在缺省模式下其数值也未必一致,除了在以下两种情况下:  1. 窗口为非滚动窗口  2. 窗口为滚动窗口,但垂直滚动条位于滚动边框的最上端,水平滚动条位于最左端,但如果移动了滚动条这两种坐标就不一致了。  在VC中鼠标坐标的坐标位置用设备坐标表示,但所有GDI绘图都用逻  坐标表示,所以用鼠标绘图时,那么必须将设备坐标转换为逻辑坐标,可以使用CDC 函数DptoLP()将设备坐标转化为逻辑坐标,同样可以用LptoDP()将逻辑坐标转化为设备坐标。  二坐标模式  为了在不同的领域使用逻辑坐标,Windows提供了以下8种坐标模式:  分别为MM_TEXT、MM_HIENGLISH、MM_LOENGLISH、MM_HIMETRIC、MM_LOMETRIC、MM_TWIPS、MM_ANISOTROPIC和MM_ISOTROPIC。  三实例解析  (一)建立以左上角为原点,X轴和Y轴为1000的坐标,如下图  我们可以用以下代码:  void CTtView::OnDraw(CDC* pDC)   {    CTtDoc* pDoc = GetDocument();    ASSERT_VALID(pDoc);    CRectrect;    GetClientRect(rect);    pDC-SetMapMode(

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档