WINDOWS程序设计映射模式和逻辑坐标与设备坐标的转化

映射模式可看作改变逻辑坐标的坐标系,改变坐标系的单位,方向等,也可通过SetWindowOrgEx函数改变坐标系原点的位置,注意当改变坐标系原点为100,100,并在110,110处输出相关信息的时候,实际上是和原点为0,0,在10,10处输出相关信息是一样的,也就是说客户区左上角的坐标变为100,100
关于公式,xWindow-xWinOrg算出x坐标距离原点的范围,xViewExt/xWinExt算出WindowPort每个单位占多少个像素(ViewPort的单位是像素)比如xViewExt为20像素,xWinPort为10(英寸),则以上的比值就代表每个英寸占2个像素,再加上ViewOrg即为在显示器上输出的位置

MM_TEXT(文本映射模式下)
当设置设备坐标为xViewPort yViewPort时,可以在客户区部分画上逻辑坐标轴,利于编程,客户区的坐标系总是以左上角为原点。就像书上所说,例如ViewPort原点为xClient/2,yViewPort/2时,可以以客户区的中间为原点画上逻辑坐标系,也就是说逻辑坐标系的原点(0,0)映射到(cxClient/2,cyClient/2)以这个坐标系为基础编程
以上的做法在使用除了MM_TEXT外的其他映射模式也是同样的。只不过其他映射模式的逻辑单位不是像素,要想通过使用SetWindowOrg来改变逻辑坐标轴在客户区中的位置,需要先将以像素为单位的设备坐标转化为逻辑坐标,应使用DptoLp函数

当选择映射模式为MM_ISOTROPIC时若设定窗口(逻辑坐标)的范围为300,200,则WINDOWS调整视口(设备坐标)的范围,使得ViewPortExt/300=ViewPortEyt/200也就是说会裁剪掉一部分使得窗口的x,y的每个逻辑单位所表示的物理长度一样,即比例一样
SetWindowExtEx中的两个参数是什么含义,默认是x的范围是-Ext/2到Ext/2,y的范围是-Eyt/2到Eyt/2吗
MM_ISOTROPIC的坐标系是怎么样的
SetWindowExtEx中的两个参数并不是真的指定了范围,实际上(应该)我们需要的只是这个参数的比值,例如尽管我们设定了范围100,100,并不是说x的范围设定为了0到100,y的范围设定为了0到100或者是x的范围设定为了-50到50,y的范围设定为了-50到50,在画矩形的时候两种情况都可以画出来,只是为了保证这个矩形宽高比的不变,有些点未必能显示出来。SetWindowExtEx函数所构建的坐标系方向默认同直角坐标系方向相同,即向上y增加,向下x增加,但是这个x,y的正负有关,只有x,y都是正数,方向才是这样,x为负,则和x正方向相反,y为负,则和y正方向相反

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值