VC坐标转换.docVIP

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

VC坐标转换 按习惯,(0,0)就原点,原点就是(0,0),但是如果用此来理解windows的map mode,就会走弯路。其实,稍微改变一下观念,windows的map mode就比较好理解了。举例说明: page spacedevice space pDC-SetMapMode(MM_LOMETRIC); pDC-SetWindowOrg(40,0);  //这句“设定”page space的原点为(40,0),注意, //这时(40,0)就是原点,原点就是(40,0)这个点,其实,(0,0)与原点没有必然联系。这 //一句对下面的画图函数在page space中所作的图不会有任何影响。一句话:SetWindowOrg? //就是指定一下,page space中哪个点为原点。 pDC-Rectangle(0,0,100,-100); pDC-Rectangle(0,-100,50,-200); 同理,SetViewportOrg也是指定一下,device space中哪个点为原点,两个坐标系映射时,两个原点重合。 SetWindowExt设定page space的大小,SetViewportOrg设定device space的大小,其实,真正有意义的只是两者的比例关系,例如,在一个1024*768的显示屏上: pDC-SetMapMode(MM_ISOTROPIC); pDC-SetWindowExt(10240,7680); pDC-SetViewportExt(1024,768); pDC-Rectangle(0,0,100,100);   就会画一个10 pixels*10 pixels的矩形。其本质就是,X方向,每个逻辑单位有1024/10240个象素,Y方向每个逻辑单位有768/7680个象素。因此,下面的代码有相同的作用: pDC-SetMapMode(MM_ISOTROPIC); pDC-SetWindowExt(102400,76800); pDC-SetViewportExt(10240,7680); pDC-Rectangle(0,0,100,100); 两者本质一样,前者更易于理解。 ================================ SetWindowOrg和SetViewportOrg这两个函数比较难搞懂,经过本人的google和实践终于弄明白了这两个函数的本质区别。? 1.SetWindowOrg 是把设备坐标的原点移动到逻辑坐标的(X, Y)处? 2.SetViewportOrg 是把逻辑坐标的原点移动到设备坐标的(X, Y)处? 注意设备坐标和逻辑坐标的区别:? 1.设备坐标的X, Y轴方向是固定的,单位也是固定的,X轴向右递增,Y向下递增,单位都是1像素。? 2.逻辑坐标的X, Y轴方向不固定,单位也不固定,根据选择的映射模式而变化。? 有了以上的解释,相信大家应该能明白为什么下面的代码的现实结果会是这样的了吧。? void CEx05aView::OnDraw(CDC* pDC)? {? pDC-SetMapMode(MM_LOMETRIC);? pDC-SetWindowOrg(100, 100);? pDC-Rectangle(0, 0, 200, 200);? pDC-SetViewportOrg(100, 100);? pDC-SelectStockObject(GRAY_BRUSH);? pDC-Rectangle(0, 0, 200, 200);? } ==================================================== 建立一个合适的坐标系可以为我们的绘图带来很大的方便 。下面介绍一下如何在VC中建立我们想要的坐标系。 一 设备坐标和逻辑坐标   设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象的位置,是以像素为单位来表示的,设备坐标的X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。   逻辑坐标(Logical Coordinate)是系统用作记录的坐标。在缺省的模式(MM_TEXT)下,逻辑坐标的方向和单位与设备坐标的方向和单位相同,也是以像素为单位来表示的,X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。逻辑坐标和设备坐标即使在缺省模式下其数值也未必一致,除了在以下两种情况下:   1. 窗口为非滚动窗口   2. 窗口为滚动窗口,但垂直滚动条位于滚动边框的最上端,水平滚动条位于最左端,但如果移动了滚动条这两种坐标就不

文档评论(0)

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

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

1亿VIP精品文档

相关文档