窗口,视口,逻辑坐标,设备坐标

查了一晚上资料,终于把窗口视口的映射搞明白了。

 

窗口是指一个虚拟存在的屏幕,看不到的,而视口是在屏幕上看到的视图客户区域。
Windows绘图时,并不是把图形直接绘制到屏幕上去,而是以各种方式下的坐标系将图形绘制到序幕的窗口中,然后将这个窗口的内容映射到视口中,
如果映射到屏幕,就实现了图形的显示,如果映射到打印机,就实现了图形的打印。

 

坐标系分三种:整屏幕坐标,整窗口坐标,客户区坐标.
视口是基于设备坐标(像素)的,通常是指客户区,整个窗口或者整个屏幕.设备坐标原点(0,0)始终是客户区,整个窗口或者整个屏幕左上角.
窗口是基于逻辑坐标(像素,mm,英寸等任何单位)的,逻辑坐标原点可以映射到设备坐标的任何点.

 

视口原点,基于设备坐标,比如设备坐标(10,10)
窗口原点,基于逻辑坐标,比如逻辑坐标(10,10)
视口原点和窗口原点始终映射为同一点,
一定要把窗口原点和逻辑坐标原点,视口原点和设备坐标系原点区分开!!!

 

SetViewportOrgEx(x,y);  //参数使用设备坐标,把设备点(x,y)设为视口原点,(同时也是窗口原点)
SetWindowOrgEx(x,y);    //参数使用逻辑坐标,把逻辑点(x,y)设为窗口原点

 

//两个函数一起使用
SetViewOrgEx(hdc,cxClient/2,cyClient/2,NULL);      
//此时,视口原点是设备坐标(cxClient/2,cyClient/2),窗口原点是逻辑坐标(0,0);
//逻辑坐标系的原点在屏幕中间,设备坐标系原点不变,在客户区(窗口,屏幕)左上角
SetWindowOrgEx(hdc,-cxClient/2,-cyClient/2,NULL);  
//此时,视口原点是设备坐标(cxClient/2,cyClient/2),窗口原点是逻辑坐标(-cxClient/2,-cyClient/2);
//逻辑坐标系的原点在屏幕右下角,设备坐标系原点不变,在客户区(窗口,屏幕)左上角

 

逻辑坐标和设备坐标的变换:
       (Xviewport-Xvieworg)/(Xwindow-Xwinorg)= Xviewext / Xwinext;
       (Yviewport-Yvieworg)/(Ywindow-Xwinorg)= Yviewext / Ywinext;
       (Xvieworg,Yvieworg)是视口原点,设备坐标;
       (Xwinorg,Xwinorg)是窗口原点,逻辑坐标;
       (Xviewport,Yviewport)是设备点,与逻辑点(Xwindow,Ywindow)对应;
       (Xwindow,Ywindow)是逻辑点;
       (xViewExt,yViewExt)是设备坐标的窗口范围;
       (xWinExt,yWinExt)是逻辑坐标的窗口范围;

 

不对的地方,欢迎高手指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值