您还可以使用SetWindowOrgEx函数来改变逻辑(0,0)点,但是这稍微困难一些,因为SetWindowOrgEx的参数必须使用逻辑单位,先要将(cxClient,cyClient)用DPtoLP函数转换为逻辑坐标。假设变量pt是型态为POINT的结构,下面的代码将逻辑(0,0)点改变到显示区域的中央:
pt.x = cxClient ;
        
pt.y = cyClient ;
        
DptoLP (hdc, &pt, 1) ;
        
SetWindowOrgEx (hdc, -pt.x / 2, -pt.y / 2, NULL) ;
我的理解是DptoLP函数是根据设备坐标与逻辑坐标间的关心转换的,而在执行这一函数时,他们之间的关心还没有确定,怎么转换的呢?

解决方案 »

  1.   

    他们的关系由映射模式决定,如果你把映射模式改为MM_ANISOTROPIC或者MM_ISOTROPIC的话,你可以通过SetWindowOrg和SetViewPortOrg来调整他们之间的关系.默认的映射模式是MM_TEXT
      

  2.   

    说错了,应该是通过SetWindowExt和 SetViewPortExt来调整他们之间的关系.
      

  3.   

    设置好了映射模式,那他们的关系就是由映射模式决定了,这个WINDOWS已经为你指定了他们的关系
      

  4.   

    是的.默认的映射模式是MM_TEXT
      

  5.   

    除了MM_ANISOTROPIC和MM_ISOTROPIC这两种模式,其实的模式下面逻辑坐标和设备坐标的转换关系已经确定好了,而MM_ANISOTROPIC和MM_ISOTROPIC这两种模式的转换关系可以自己设置.