三国杀黄月英去衣图片:基于VC++的GDI常用坐标系统及应用 (3)

来源:百度文库 编辑:中财网 时间:2024/04/25 03:42:07
 三、固定映射模式   为了控制设备上下文中的坐标轴的方向,可以使用CDC类的SetMapMode()函数,它的语法如下:  int SetMapMode(int nMapMode);    这个函数将根据参数的设置的不同做两件事,一是控制坐标轴的方向;二是坐标系统的单位长度。   这个函数的参数是用来定义映射模式的整型常量。它可能的值是:MM_TEXT, MM_LOENGLISH、MM_HIENGLISH、MM_ANISOTROPIC、MM_HIMETRIC, MM_ISOTROPIC、 MM_LOMETRIC, MM_TWIPS。   默认情况下使用MM_TEXT映射模式。换句话说,如果你没有具体的规定某一映射模式,你的应用程序就将使用MM_TEXT映射模式。在这种映射模式下,设备上下文中的度量尺寸将使用默认的像素单位,水平坐标轴正方向向右,垂直坐标轴正方向向下。例如,上面的OnPaint事件可以用下面的代码重写,它将产生同样的效果,仿佛没有使用映射模式。  void CExoDraw1View::OnPaint()  {  CPaintDC dc(this); // device context for painting  dc.SetMapMode(MM_TEXT);  dc.SetViewportOrg(380, 220);  // Use a red pen  CPen PenRed(PS_SOLID, 1, RGB(255, 0, 0));  dc.SelectObject(PenRed);  // A circle whose center is at the origin (0, 0)  dc.Ellipse(-100, -100, 100, 100);  // Use a blue pen  CPen PenBlue(PS_SOLID, 1, RGB(0, 0, 255));  dc.SelectObject(PenBlue);  // Horizontal axis  dc.MoveTo(-380, 0);  dc.LineTo(380, 0);  // Vertical axis  dc.MoveTo(0, -220);  dc.LineTo(0, 220);  // An orange pen  CPen PenOrange(PS_SOLID, 1, RGB(255, 128, 0));  dc.SelectObject(PenOrange);  // A diagonal line at 45 degrees  dc.MoveTo(0, 0);  dc.LineTo(120, 120); }

图十、代码效果图

  MM_LOENGLISH模式,与其他一些映射模式(不包括MM_TEXT模式)一样,执行两个动作,它改变坐标轴的方向,垂直坐标轴的正方向向上;

图十一、MM_LOENGLISH
映射模式下的坐标系     此外,度量单位改为0.01英寸,这意味着你提供的坐标将除以100,观察上述代码的MM_LOENGLISH映射效果  void CExoDraw1View::OnPaint()  {  CPaintDC dc(this); // device context for painting  dc.SetMapMode(MM_LOENGLISH);  dc.SetViewportOrg(380, 220);  . . . }

图十二、代码效果图
    正如你所看到的,直线现在位于坐标系的第一象限,同时,直线比以前缩短,圆也比以前的要小。   与MM_LOENGLISH映射模式相似,MM_HIENGLISH映射模式也是垂直坐标轴正向向上,只是它以0.001英寸为坐标单位,下面是它的效果:  void CExoDraw1View::OnPaint()  {  CPaintDC dc(this); // device context for painting  dc.SetMapMode(MM_HIENGLISH);  dc.SetViewportOrg(380, 220);  . . . Same as previous }

图十三、代码效果图
     MM_LOMETRIC映射模式使用与上两种映射模式相同的坐标轴,不同的是MM_LOMETRIC使用0.1毫米为单位,下面是一个例子:  void CExoDraw1View::OnPaint()  {  CPaintDC dc(this); // device context for painting   dc.SetMapMode(MM_LOMETRIC);  dc.SetViewportOrg(380, 220);  . . . }

图十四、代码效果图  
  MM_HIMETRIC使用与上述三种映射模式相同的坐标系,但它的坐标单位是0.01毫米,下面例子代码如下:  void CExoDraw1View::OnPaint()  {  CPaintDC dc(this); // device context for painting  dc.SetMapMode(MM_HIMETRIC);  dc.SetViewportOrg(380, 220);  . . . Same as previous }

图十五、代码效果图
     MM_TWIPS映射模式将每个逻辑单位(像素)除以20,实际上一twip等于1/1440 英寸,坐标系统仍然与上面几种映射方式相同。  void CExoDraw1View::OnPaint()  {  CPaintDC dc(this); // device context for painting  CRect Recto;  dc.SetMapMode(MM_TWIPS);  dc.SetViewportOrg(380, 220);  . . . }

图十六、代码效果图