zoukankan      html  css  js  c++  java
  • Visual C++ 打印编程技术-编程基础-映射模式

    映射模式:

          Visual C++ 中采用的坐标映射方式使得用户图形坐标和输出设别的像素完全一致。

          eg:当屏幕的像素大小为800X600时,每英寸包含屏幕像素为96,打印机则需要几倍的点数才能达到同样的逻辑尺寸

               因此可通过转换坐标映射方式,是打印机采用的坐标比例比显示时所采用的坐标比例相应地大若干倍。

          映射模式:在屏幕或打印机上绘图时候,可以使用英寸或者毫米代替作为单位(代替像素),往往更加直观。

          PS: 设备单位,逻辑单位

                设备单位:是传递给绘图函数的X和Y值,他们可以表示英寸和毫米

                逻辑单位:X,Y在屏幕上的像像素,或是打印机上的点阵数。

               点击鼠标以设备单位返回,如果想知道鼠标点击位图的什么位置,需要将设备单位转化为逻辑单位。 

    可用的映射模式
    映射模式 逻辑单位
     MM_TEXT  1px
    MM_LOMETRIC 0.1mm
    MM_HIMETRIC 0.01mm
    MM_LOENGLISH 0.01英寸
    MM_HIENGLISH 0.001英寸
    MM_TWIPS 1/1440英寸
    MM_ISOTROPIC 用户定义的值,但X和Y方向相等(等比)
    MM_ANISOTROPIC 用户定义的值,但X和Y方向任意

    映射模式通过设备环境类的一个成员函数SetMapMode()来设置,只要把上述标志当作参数传入函数即可。

    设置映射模式后,传给任何绘图函数的坐标值都通过GDI内部的映射机制转换成设备坐标。

    PS:MM_TEXT模式时,Y轴的正方向是沿屏幕垂直向下,X轴是沿屏幕向右

         其它模式时,Y轴正方向沿屏幕垂直向上,X轴是沿屏幕向后

    窗口:以逻辑单位表示绘图区域的大小,屏幕所见尺寸

    视口:以设备单位(像素或点阵数)表示设备绘图区域的大小,如:打印机

    	pDC->SetMapMode(MM_TEXT);
    	pDC->SetViewportOrg(50,50);
    	pDC->SetWindowOrg(200,200);
    	CPen myPen(PS_SOLID,1,RGB(255,0,0));
    	CPen* pOldPen=pDC->SelectObject(&myPen);
    	pDC->TextOut(200,180,_T("左上点像素坐标=50,y=50"));
    	pDC->Rectangle(200,200,400,400);
    	pDC->SelectObject(pOldPen);
    	myPen.DeleteObject();
    

      结果如图:

  • 相关阅读:
    C#获取EF实体对象或自定义属性类的字段名称和值
    Android 短信广播接收相关问题
    Silverlight5 Tools安装失败及解决方案
    验证码刷新
    Silverlight动态生成控件实例
    spring 属性注入
    asp.net XMLHttpRequest 进度条以及lengthComputable always false的解决办法
    Spring.Net 初探之牛刀小试
    iframe载入页面过程显示动画效果
    一次让人晕到吐血的接包经历
  • 原文地址:https://www.cnblogs.com/ericyi/p/4386858.html
Copyright © 2011-2022 走看看