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();
    

      结果如图:

  • 相关阅读:
    类和对象代码练习1
    搬迁MSSQL出现的问题
    QQ群空间是我见过最烂的系统
    导出表数据脚本的存储过程 [转自CSDN]
    plesk for Linux 没有默认首页的优先级别设置
    传说中的otag开源是假的。BS!!!!!
    FTP关闭mput上传确认
    刚装的vs2008不能生成silverlight,郁闷中
    怎么查域名反向解析是否成功
    现在的黑客太有才了。。。/不喜欢开防火墙的要小心
  • 原文地址:https://www.cnblogs.com/ericyi/p/4386858.html
Copyright © 2011-2022 走看看