上很多废话:什么是逻辑设备..视角…世界… 每个人都有自己的解释.网上很多人说,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倍哦。。
简单就是美。。