原创 setviewportorgex与setwindoworgex

2012-11-23 11:34 1037 17 17 分类: 工程师职场

GDI绘图中调整窗口与视口的坐标原点,相当于定位笛卡尔逻辑坐标系。

先说一下自己对窗口与视口的理解:

窗口(Window),是指整个程序界面,比如一个带滚动条IE浏览器中,页面内容很长,所有内容构成窗口;视口(Viewport),指的是当前屏幕看到的那一块,即滚动条所处的可见位置。

视口,与屏幕设备相关,用设备坐标;窗口,与设备无关,用逻辑坐标。TextOut等大部分GDI函数都用逻辑坐标。要讲的两个函数,作用即是两坐标的映射调整。

引用Charlez的《Windows程序设计》一下,有点晕:

如果将视口原点改变为(xViewOrg,yViewOrg),则逻辑点(0.0)就会映像为设备点(xViewOrg,yViewOrg)。如果将窗口原点改变为(xWinOrg,yWinOrg),则逻辑点(xWinOrg,yWinOrg)将会映像为设备点(0,0),即左上角。不管对窗口和视端口原点作什么改变,设备点(0,0)始终是显示区域的左上角。

这里,Set不是“设置”,而是“调整”。初始时,视口与窗口原点重合,都在左上角。都是“被调整主体”上移。

SetViewPortOrgEx(x,y) ——调整视口,令视口原点调整为现在的(x,y)

SetWindowOrgEx(x,y)   ——调整窗口,令窗口原点调整为现在的(x,y)

具体过程如文末图所示。

我们知道,原始坐标如左图所示,向下向右为正,如果想要变为右图所示,应如何调整?视口上调了,SetViewPortOrgEx(x,y);或者说窗口下调了,SetWindowOrgEx(-x,-y)。它们执行的是相反操作。

 

a978a4d6d3409f0206088b04.jpg

         

 

9ff9134eb02794e7d0c86a3c.jpg

文章评论0条评论)

登录后参与讨论
我要评论
0
17
关闭 站长推荐上一条 /2 下一条