dc.SetWindowExt(CSize(10,10));
dc.SetViewportExt(rect.right,-rect.bottom);
dc.SetViewportOrg(rect.right/2,rect.bottom/2);
请问对应设备坐标点(0,0)的逻辑坐标点是多少? 

解决方案 »

  1.   

    除MM_ANISOTROPIC与MM_ISOTROPIC之外,坐标视图的原点均在左上角。这两种模式的默认坐标轴方向与坐标原点与上一次映射模式的坐标轴相同,假设上一次映射模式为MM_TEXT,那么:
    当nMapMode为MM_ANISOTROPIC时,默认的原点在左上角,并且x轴向右,y轴向下。
    设置了SetWindowExt与SetViewportExt后,当这两个函数的x坐标异号时,x轴在默认方向上反转,同号时,x轴就是默认方向
    当这两个函数的y坐标异号时,y轴在默认方向上反转,同号时,x轴就是默认方向。
    无论SetWindowExt与SetViewportEx如何调用,调用SetViewportOrg就是在MM_TEXT模式,将原点从左上方移动了x,y, 这里的x轴,y轴就是MM__TEXT的方向。
    SetWindowOrg是以SetWindowExt与SetViewportExt所指定xy轴方向上,在把原点向原方向(x<0)或向反方向(x>0),向反方向(y>0)或向原方向(y<0)移动。
    那么实际的原点就是SetWindowOrg和SetViewportOrg的效果之和。
    当nMapMode为MM_ISOTROPIC时,如果通过计算window与viewport范围的比值得到两个方向的单位刻度值不同,那么将会以较小的那个为准。
      

  2.   

    多谢一楼。假设上一次映射模式为MM_TEXT,那么经过
    dc.SetWindowExt(CSize(10,10)); 
    dc.SetViewportExt(rect.right,-rect.bottom)
    dc.SetViewportOrg(rect.right/2,rect.bottom/2);
    视口原点是rect.right/2,rect.bottom/2还是rect.right/2,-rect.bottom/2
      

  3.   

    那么用下列公式计算的时候:yViewExt   -rect.bottom     rect.bottom
    --------是 -------------还是-------------?
    yWinExt         10              10