spongebobyey 发表于 2019-10-12 19:32:09

视口和窗口

本帖最后由 spongebobyey 于 2019-10-12 19:46 编辑

理解什么叫做视口和窗口,这里就解决了.
都在此页:https://fishc.com.cn/forum.php?mod=forumdisplay&fid=255&typeid=420&typeid=420&filter=typeid&page=4
视口简单的就是说你眼睛能看到。
窗口就好比是一个世界,这里包括你所看到的就像一个包罗万象的容器。而视口只是呈现你能看到的,你能观察到的。
1.窗口   表示为一个世界
2.需要将逻辑坐标需要表示为设备坐标
3.逻辑-> 窗口设备->视口
   
   SetMapMode(hdc,MM_LOMETRIC)//把窗口分为0.1毫米   视口基座标系在左上角的模式
   传送门:https://fishc.com.cn/forum.php?mod=viewthread&tid=64573&extra=page%3D4%26filter%3Dtypeid%26typeid%3D420

SetViewportOrgEx   
    传送门:https://fishc.com.cn/forum.php?mod=viewthread&tid=64702&extra=page%3D4%26filter%3Dtypeid%26typeid%3D420
      设置视口原点


坐标转换

LPtoDP将指定的逻辑坐标转换为设备坐标
DPtoLP将设备坐标转换为逻辑坐标

GetCurrentRect(hdc,&rect);
DPtoLP(hdc,(PPOINT)&rect,2);   

画sin
1.在本次中,由于已经转化为逻辑坐标0.1毫米
2.将基座标系设置在了左中

因此获取当前的rect图形其left和top都为0

当转化为逻辑坐标后
left和top都化为一半

转化方向

MM_ISOTROPIC 和MM_ANISOTROPIC

注意:
1.应该先设置窗口的范围,在设置视口的范围
setWindowExtEx(hdc,100,100,NULL)窗口逻辑上为100*100   该函数指定window的基座标
SetViewportExtEx(hdc,cxClient/2,cxClient/2,NULL) 窗口逻辑为200*200的窗口    该函数指定view的基座标

刚才没有把逻辑坐标转换为设备坐标,是因为没有设置窗口的逻辑坐标


xViewport=(xWindow-xWinOrg)*xViewExt/xWinExt+xVieworg
yViewport=(yWindow-yWinOrg)*yViewExt/xWinExt+yVieworg
页: [1]
查看完整版本: 视口和窗口