映射模式:

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

  结果如图:

Visual C++ 打印编程技术-编程基础-映射模式的更多相关文章

  1. Visual C++ 打印编程技术-编程基础

    背景: windows产生前,操作系统(如DOS等)都不提供支持图像处理的打印机驱动程序,使得程序员为打印出图像,不得不针对使用的打印机 自己编写设备驱动程序,导致了大量的.不必要的重复开发. 随着w ...

  2. Visual C++ 打印编程技术-编程基础-获取打印机

    标准方法是用: EnumPrinters() 函数获取 #define PRINTER_ENUM_DEFAULT 0x00000001 #define PRINTER_ENUM_LOCAL 0x000 ...

  3. shell编程技术之-基础知识

    一.脚本结构 linux下shell的脚本,是将一系列命令序列写在一个文本文件,而这个文本文件时可执行的.相对命令行来说,开发效率提高.因此他的构架有2部分构成#!和命令序列.其中#!指明此脚本是用哪 ...

  4. C++ STL编程轻松入门基础

    C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...

  5. 网页编程技术与实例 PDF扫描版

    本书主要包括:Web的概念,使用网页编辑工具制作网页,HTML语言的基本结构,JavaScrip和VBScript脚本语言的编程方法,ASP的概念,ASP对象的属性.方法和事件,SQL语言,数据库建议 ...

  6. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  7. Java Web编程技术学习要点及方向

    学习编程技术要点及方向亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理.要Jar, 不要War:以小为主,以简为宝,集堆而成.去繁取简 Spring Boot,明日之春(future of ...

  8. 转载--提高C++性能的编程技术

    读书笔记:提高C++性能的编程技术   第1章 跟踪范例 1.1 关注点 本章引入的实际问题为:定义一个简单的Trace类,将当前函数名输出到日志文件中.Trace对象会带来一定的开销,因此在默认情况 ...

  9. linux脚本编程技术

    linux脚本编程技术 一.什么是脚本 脚本是一个包含一系列命令序列的可执行(777)文本文件.当运行这个脚本文件时,文件中包含的命令序列将得到自动执行. 二.脚本编程 #!/bin/sh 首行固定格 ...

随机推荐

  1. 破解密码那些事儿(Hacking Secret Ciphers with Python)

    作者:Al Sweigart   我们在电视和电影里头经常能够看到黑客们兴奋的快速敲击键盘,接着毫无意义的数字就在屏幕上飞奔(比如黑客帝国).然后让大家产生了一种奇妙的错觉,做黑客是一件高大上的事情, ...

  2. aix i节点

    文件系统与inode• UNIX文件系统有很多种类型,如HFS,NFS,JFS,CDFS.虽然文件系统种类很多,但是也有着一些相同的数据结构:超级块.inode.目录等等. • inode译成中文就是 ...

  3. NOIP2015 提高组(senior) 解题报告

    过了这么久才来发解题报告,蒟蒻实在惭愧 /w\ Day1 T1 [思路] 模拟 [代码] #include<iostream> #include<cstring> #inclu ...

  4. UVALive 5135 Mining Your Own Business 双连通分量 2011final

    题意:n条隧道由一些点连接而成,其中每条隧道链接两个连接点.任意两个连接点之间最多只有一条隧道.任务就是在这些连接点中,安装尽量少的太平井和逃生装置,使得不管哪个连接点倒塌,工人都能从其他太平井逃脱, ...

  5. Linux内核系列之Block块层(一)

    .Block块层入口函数为 genhd_device_init(),先对该函数开始分析: 函数实现源码: static int __init genhd_device_init(void) {     ...

  6. Mac Vim 如何设置高亮

    首先进入如下目录 cd /usr/share/vim 然后打开vimrc sudo vim vimrc 在vimrc中的“set backspace=2”这行下插入如下代码: set ai " ...

  7. 使用WIF实现单点登录Part III —— 正式实战 -摘自网络

    经过前两篇文章,估计大家对WIF已经有比较充分的认识了,估计大家在经过了枯燥的理论以后,肯定是摩拳擦掌赶紧付诸于行动了.没办法,咱们程序员就是这个毛病.那好吧,我也不那么多废话了,直接进入正题吧. 我 ...

  8. StreamWriter

    public StreamWriter( string path, bool append ) 参数 path 类型:System.String要写入的完整文件路径. append 类型:System ...

  9. Oracle ABP(Autotask Background Process)

    ABP相当于自动任务与调度程序之间的中介,其主要作用是将自动任务转换成Autotask作业,供调度程序执行.同样重要的是,ABP还维护所有任务执行的历史记录.ABP将其专用资料档案库存储在sysaux ...

  10. vue相关

    勾三股四的vue+webpack实战:http://jiongks.name/blog/just... 用Vue构建一个Notes App:https://coligo.io/learn-vuex-. ...