SetMapMode、SetWindowOrg、SetViewportOrg、SetWindowExt与SetViewportExt

      CDC::SetMapMode 
      virtual int SetMapMode( int nMapMode );
      函数功能描述:该函数设置指定设备环境的映射方式,映射方式定义了将逻辑单位转换为设备单位的度量单位,并定义了设备的X、Y轴的方向。
      nMapMode:指定新的映射方式,此参数可以是下面列出的任何一个值。 
      MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任意单位,用SetWindowExt和SetViewportExt函数可指定单位、方向和比例。//两者要同时使用

      MM_HIENGLISH:每个逻辑单位转换为0.01英寸,X的正方面向右,Y的正方向向上。 
      MM_HIMETRIC:每个逻辑单位转换为0.01毫米,X正方向向右,Y的正方向向上。 
      MM_ISOTROPIC:逻辑单位转换成具有均等比例轴的任意单位,即沿X轴的一个单位等于沿Y轴的一个单位,用和函数可以指定该轴的单位和方向。图形设备界面(GDI)需要进行调整,以保证X和Y的单位保持相同大小(当设置窗口范围时,视口将被调整以达到单位大小相同)。

      MM_LOENGLISH:每个逻辑单位转换为0.1英寸,X正方向向右,Y正方向向上。 
      MM_LOMETRIC:每个逻辑单位转换为0.1毫米,X正方向向右,Y正方向向上。
      MM_TEXT:每个逻辑单位转换为一个图素,X正方向向右,Y正方向向下。
      MM_TWIPS;每个逻辑单位转换为打印点的1/20(即1/1400英寸),X正方向向右,Y方向向上。
      
      备注:
      MM_TEXT方式允许应用程序以设备像素为单位来工作,像素的大小根据设备不同而不同。MM_HIENLISH, MM_HIMETRIC,
      MM_LOENGLISH,
      MM_LOMETRIC和MM_TWIPS方式对必须用物理意义单位(如英寸或毫米)制图的应用程序是非常有用的。MM_ISOTROPIC方式保证了1:1的纵横比。MM_HIENLISH方式允许对X和Y坐标分别进行调整。

 

      1.SetWindowOrg(x, y) 是把设备坐标的原点(视口)映射到逻辑坐标的(X, Y)处
      2.SetViewportOrg(x, y) 是把逻辑坐标的原点(窗口)映射到设备坐标的(X, Y)处
      3. 设备原点永远是客户区的左上角顶点。
      注意设备坐标和逻辑坐标的区别:

      1.设备坐标的X, Y轴方向是固定的,单位也是固定的,X轴向右递增,Y向下递增,单位都是像素。

      2.逻辑坐标的X, Y轴方向不固定单位也不固定,根据选择的映射模式而变化。 //画图始终用逻辑坐标

 

      设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象的位置,是以像素为单位来表示的,设备坐标的X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。
      逻辑坐标(Logical Coordinate)是系统用作记录的坐标。在缺省的模式(MM_TEXT)下,逻辑坐标的方向和单位与设备坐标的方向和单位相同,也是以像素为单位来表示的,X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。逻辑坐标和设备坐标即使在缺省模式下其数值也未必一致,除了在以下两种情况下:
        1. 窗口为非滚动窗口
        2. 窗口为滚动窗口,但垂直滚动条位于滚动边框的最上端,水平滚动条位于最左端,但如果移动了滚动条这两种坐标就不一致了。
        在VC中鼠标坐标的坐标位置用设备坐标表示,但所有GDI绘图都用逻辑坐标表示,所以用鼠标绘图时,那么必须将设备坐标转换为逻辑坐标,可以使用CDC函数DptoLP将设备坐标转化为逻辑坐标,同样可以用LptoDP将逻辑坐标转化为设备坐标。

你可能感兴趣的:(SetMapMode、SetWindowOrg、SetViewportOrg、SetWindowExt与SetViewportExt)