您的位置:首页 > 其它

视口与窗口的映射

2015-09-28 14:51 162 查看
未完待续。。。

先来讲解一下什么是视口与窗口。注意,不要把术语窗口与我们平常说的打开一个窗口相混淆。我们平常说的窗口恰恰是这里要讲要术语视口。



所谓视口,就是我们看得见的部分。在上图中,视口就是红色虚线框起来的部分。当我们拖动滚动条向下拖动网页的时候,视口始终就是这么大,保持不变。而整个网页就是窗口。向下拖动网页的时候,网页上半部分因为超出视口,而看不到了。我们从视口中看到了网页的一部分。

有了这个形象的说明,我们就很清楚视口与窗口的区别了。视口就是当前“窗口”的大小,也就是红色虚线框所围成的区域。而窗口就是整张网页的大小。现在视口只是把窗口的一部分给显示了出来。

SetViewportOrgEx(
  HDC hdc, 
  int X, 
  int Y, 
  LPPOINT lpPoint
);
视口左上角始终是(0, 0),即红色虚线框的左上角。x轴向右为正,y轴向下为正。当调用SetViewportOrgEx函数后,修改的只是映射关系而已,即以后窗口要把SetWindowOrgEx指定点(默认是窗口自己的(0, 0)点)映射到视口的点(X, Y)。当然,你也可以认为现在视口的原点为(X,
Y),但要注意,视口的左上角始终是(0, 0)点。

==========================================================

SetWindowOrgEx(
  HDC hdc, 
  int X,
  int Y,
  LPPOINT lpPoint
);

窗口左上角也始终是(0, 0),该原点是在整个网页的左上角。这个函数是设置窗口的坐标原点怎么映射视口的坐标原点。当调用该函数后,就把窗口的(X, Y)映射到视口的原点处。也就是说,窗口的原点始终是(0, 0),始终在窗口的左上角。而SetWindowOrgEx函数修改的只是映射关系而已。就是把窗口的(X,
Y)平移到视口的SetViewportOrgEx指定点处(默认情况下是视口的(0, 0)点)。当然,你也可以认为现在窗口的原点是(X, Y),但是窗口的左上角始终也是(0, 0)点。

通过上述分析,我们可以知道,无论怎么设置原点,所有点的坐标的值都没有发生变化,原来当原点是(0, 0)时,我们考察点A,它的坐标是(2, 3)。发现当把原点设为(10, 20)的时候,点A的坐标仍然是(2, 3)。

上述两个函数修改的只是映射关系而已。就是把窗口的原点平移到视口的原点处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: