Windows中窗口与视口概念,SetViewportOrg与SetWindowOrg函数

窗口与视口的概念:

窗口和视口其实是同一块矩形区域,两者坐标系的原点是同一个点。窗口和视口的区别仅仅是单位不同,窗口坐标为逻辑坐标,视口的坐标为像素坐标。

窗口的变换和视口的变换的目的是一样的,都是为了将物体显示在设备环境中,只不过由于视口中使用像素作为单位也就是显示屏的设备坐标,所以往往在视口中进行调整dc比较直观一些。

具体两者的概念上的区别参考:https://blog.csdn.net/hongke457546235/article/details/17405817

SetViewportOrg与SetWindowOrg函数

关于两者的使用举例说明:(MM_TEXT映射模式)

   (1) CRect rect(0, 0, 200, 200); dc.rectangle(rect); 上面的语句在屏幕的最左上角绘制一个正方形;(因为此时逻辑坐标与设备坐标没有偏移)

   (2) dc.SetViewportOrg(100, 100); CRect rect(0, 0, 200, 200); dc.rectangle(rect); 将设备坐标的原点设置到(100, 100);即设备坐标的原点不在(0, 0)处,而是在(100, 100)处;此时若执行映射的话,逻辑坐标的原点(0, 0)需要与设备坐标的原点(100, 100)重合(参考前提5);那么此时绘制的矩形(0, 0, 200, 200)的坐标(为逻辑坐标,参考前提1)在设备坐标中就会映射为(100, 100, 300, 300),最终我们在显示器上看到的会是一个向右下方偏移(100, 100)的一个边长为200的正方形(用户看到的点是在设备坐标中的,参考前提2)

   (3) dc.SetWindowOrg(100, 100); CRect rect(0, 0, 200, 200); dc.rectangle(rect); 将逻辑坐标的原点设置到(100, 100);即逻辑坐标的原点不在(0, 0)处,而是在(100, 100)处;此时若执行映射的话,设备坐标的原点(0, 0)需要与逻辑坐标的原点(100, 100)重合(参考前提5);那么此时绘制的矩形(0, 0, 200, 200)的坐标(为逻辑坐标,参考前提1)在设备坐标中就会映射为(-100, -100, 100, 100),最终我们在显示器上看到的会是一个只有1/4个大小的矩形的一部分(事实上相当于向左上方偏移(100, 100)的一个边长为200的正方形。注意:用户看到的点是在设备坐标中的,参考前提2)

本部分是摘自:https://www.xuebuyuan.com/2051482.html

此部分的运行结果可以看:https://blog.csdn.net/lishuhuakai/article/details/18467255

本人对此的理解是SetViewportOrg与SetWindowOrg函数改变的仅仅是入去去映射,也就是窗口坐标系中哪一点对应视口坐标系中哪一点,而不会导致他们各自的绘图坐标系移动、改变。

猜你喜欢

转载自blog.csdn.net/qq_16334327/article/details/84343989
今日推荐