程序员角度有关 SetWindowPortOrg,SetViewportOrg,SetWindowExtEx ,SetViewportExEX.

上很多废话:什么是逻辑设备..视角…世界… 每个人都有自己的解释.网上很多人说,VIEW是物理的.WINDOW是逻辑..但是也有人说的相反..简单点,已经被各种概念词语塞满了

1, 适用范围: Setmapmode 在MM_ISOTROPIC 或 MM_ANISOTROPIC,才可以用这几个函数,否则不灵了。

2,公式如下:

Xviewport=(Xwindow-Xwinorg)* Xviewext / Xwinext + Xvieworg;

Yviewport=(Ywindow-Xwinorg)* Yviewext / Ywinext + Yvieworg;

公式解释:

两个坐标系:WINDOW和VIEW

WINODWORG原点(X,Y).用SetWindowPortOrg函数设置;坐标范围,Xwinext,Ywinext 用SetWindowExt函数设置。

VIEWORG原点(X,Y); SetViewportOrg设置坐标范围 Xviewext,Yviewext

 

解释用法:只要记住:

WINDOW坐标系是你程序上用的: 比如 CANVAS.moveto(x,y) ,lineto(x,y)

显示结果VIEW坐标系是结果, 。实际显示在屏幕那个点?如何换算,靠公式。

例如: 假如你的竖的滚动条要滚到100,显示100以后的东东。很简单。。SetViewportOrg(0,100)。 为什么不用SetwindowsPort? (网上看很多文章有提到用这个,但是 用这个是有条件的),注意公式,假如用了SetwindowsPort?结果会受到Xviewext / Xwinext 和Yviewext / Ywinext的影响。假如没有放大缩小。。你懂的,一切都是公式为准。所有解释都假的。

 

Xviewext / Xwinext 和Yviewext / Ywinext 是什么?其实就是编程中的放大缩小。就是程序里尺寸缩放比例。比如:

Setwindowexex(100,100)

Setviewportexex(200,200)

他就放大两倍。 2倍怎么算? 200/100=2.

3,坐标范围是真的么?

坐标范围其实跟有用么?其实这个不是真实的坐标范围。 他只是为了取得Xviewext / Xwinext,Yviewext / Ywinext。已取得缩放比率。

在任何区域, setwindowexex(1,1),  setviewportexex(2,2) ,照样放大2倍哦。。

 

 

 

简单就是美。。

分享到: