setviewportorg的时候用的是像素,setwindoworg的时候用的是逻辑值。
比如setviewportorg(100,100);就是把距离客户区上边框100像素,左边框100像素的点设为逻辑原点
setwindoworg(100,100),就是把客户区的左上角设置为逻辑坐标(100,100)
我这样理解有错误吗?
应该对吧。
如果同时使用呢?
setviewportorg(100,100);
setwindoworg(100,100);
这时候的对应关系是怎么样的呢?(逻辑坐标和设备坐标的对应关系)谁来说明一下啊

解决方案 »

  1.   

    SetViewPortOrg用的是物理坐标,比如SetViewPortOrg(100,100)是将以左上角为(0,0),向下100,向右100的那个点设为逻辑坐标原点。
    SetWindowOrg用的是逻辑坐标,比如SetWindowOrg(100,100)是将屏幕左上角,物理坐标(0,0)点的逻辑坐标设为(0,0)点
    这两个API一般只用一个就行了,如果你用了两个,那么,当然以后调用的那一个为准了。
      

  2.   

    楼下最后那一句的意思是,setviewportorg和setwindoworg谁最后调用,窗口原点由谁确定了?
    那么你的理解就错了,以我无数次的实验结果来看是不对的
      

  3.   

    为了广大后继者的福祉,我查了一天资料,突然悟了,虽然有可能不正确:
    setviewportorg毫无疑问的把逻辑原点设在了距离客户区上方x_view,距离客户区左边y_view的地方,也就是设备坐标的(x_view,y_view)映射为逻辑原点(0,0)
    setwindoworg可以这么理解,它把逻辑原点逆着x,y轴的方向移动了x_window,y_window的距离。
    比如setviewportorg(100,100),
    setwindoworg(100,100),
    这样逻辑原点又回到了设备原点!
    实验结果也说明了这一点。
      

  4.   

    研究了一下,我觉得是不是可以这样理解这两个函数:
    物理坐标原点始终都是左上角,初始状态逻辑坐标原点也是左上角。
    SetViewportOrg(x,y)的作用是逻辑坐标原点向右移动x个单位,向下移动y个单位(当然些时x轴以向右为正方向,y轴以向下为正方向),也就是说,这个函数的作用是将逻辑坐标原点从原来位置分别向着正方向移动若干个单位。
    比如:
    SetViewportOrg(100,100);//这句的作用是将逻辑坐标原点向右移100,向下移100.
    SetWindowOrg(x,y)的作用是将逻辑坐标原点向左移x个单位,向上移y个单位。也就是说这个函数的作用是将逻辑坐标原点从原来位置分别向着负方向移动若干个单位。
    比如:
    SetWindowOrg(100,100)//这句的作用是将逻辑坐标原点从原来的位置向左移100个单位,向上移100个单位。
    我试了一下将这两句同时写:
    pDC->SetWindowOrg(100,100);
    pDC->SetViewportOrg(100,100);
    发现逻辑坐标原点又回到了左上角。
    而将它改成:
    pDC->SetWindowOrg(50,50);
    pDC->SetViewportOrg(100,100);
    发现,结果也是符合我上面所说的。
    总结,这两个函数应该可以看作是将逻辑坐标进行移动,但是两者移动的方向恰好相反,SetViewportOrg是向正方向移动,而SetWindowOrg是向着负方向移动。另外,SetMapMode选择不同的映射模式应该也会影响到这两个函数。
      

  5.   

    我觉得可以这样理解的:
    其实既然叫做“映射模式”,我们就应该从“映射”这个角度来理解。
    SetViewportOrg(x,y)就是把设备(视口)点(x,y)映射到逻辑点(0,0),所有坐标点都不用移动;
    SetWindowOrg(x,y)就是把逻辑(窗口)点(x,y)映射到设备点(0,0),同样所有坐标点都不用移动;
    只要(0,0)确定了,其他的点跟着变就行了。