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();
结果如图:

Visual C++ 打印编程技术-编程基础-映射模式的更多相关文章
- Visual C++ 打印编程技术-编程基础
背景: windows产生前,操作系统(如DOS等)都不提供支持图像处理的打印机驱动程序,使得程序员为打印出图像,不得不针对使用的打印机 自己编写设备驱动程序,导致了大量的.不必要的重复开发. 随着w ...
- Visual C++ 打印编程技术-编程基础-获取打印机
标准方法是用: EnumPrinters() 函数获取 #define PRINTER_ENUM_DEFAULT 0x00000001 #define PRINTER_ENUM_LOCAL 0x000 ...
- shell编程技术之-基础知识
一.脚本结构 linux下shell的脚本,是将一系列命令序列写在一个文本文件,而这个文本文件时可执行的.相对命令行来说,开发效率提高.因此他的构架有2部分构成#!和命令序列.其中#!指明此脚本是用哪 ...
- C++ STL编程轻松入门基础
C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...
- 网页编程技术与实例 PDF扫描版
本书主要包括:Web的概念,使用网页编辑工具制作网页,HTML语言的基本结构,JavaScrip和VBScript脚本语言的编程方法,ASP的概念,ASP对象的属性.方法和事件,SQL语言,数据库建议 ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- Java Web编程技术学习要点及方向
学习编程技术要点及方向亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理.要Jar, 不要War:以小为主,以简为宝,集堆而成.去繁取简 Spring Boot,明日之春(future of ...
- 转载--提高C++性能的编程技术
读书笔记:提高C++性能的编程技术 第1章 跟踪范例 1.1 关注点 本章引入的实际问题为:定义一个简单的Trace类,将当前函数名输出到日志文件中.Trace对象会带来一定的开销,因此在默认情况 ...
- linux脚本编程技术
linux脚本编程技术 一.什么是脚本 脚本是一个包含一系列命令序列的可执行(777)文本文件.当运行这个脚本文件时,文件中包含的命令序列将得到自动执行. 二.脚本编程 #!/bin/sh 首行固定格 ...
随机推荐
- [摘]selenium-ide命令
关于,selenium 命令这一部分,为了便于像我一样的菜鸟理解,我采用通过例子讲命令的方式. 菜鸟Selenium 命令通常被称为selenese,有一系列运行测试案例所需的命令构成. ----// ...
- c pvr转存pvr.ccz格式
pvr.ccz 是把pvr用zlib算法压缩后的图像格式,其优点是可以提升文件读取效率. 大多数情况下我们可以用一些工具来将pvr压缩到pvr.ccz ,下面提供一个c++方法来完成这个过程 int ...
- Flex 箭头(军标)库封装完成
封装的一个月,在这个月期间还完成的一些其它的工作:公司有规定不能公布代码,我可以讲一下大致的流程,真的很抱歉! 1.用B样条曲线画箭头的两侧的曲线,这个要注意了,不要贝塞尔曲线,因为贝塞尔曲线的算法会 ...
- [TYVJ1827]『Citric II』一道防AK好题
时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 第二届『Citric杯』NOIP提高组模拟赛第一题 描述 Lemon认为在第一届『Citric』杯模拟赛中出的 ...
- 【CSS】Intermediate2:Grouping and Nesting
1.Grouping 2.Nesting If the CSS is structured well, there shouldn’t be a need to use many class or I ...
- platform机制
最近在看SPI.I2C这样简单点的总线驱动程 序,从Linux2.6起,内核引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver.现在Linux中 大部分的 ...
- PC-IIS因为端口问题报错的解决方法
1.我的电脑-管理-服务和应用程序-Internet信息服务 情况:这时发现“默认 SMTP 虚拟服务器”停止 解决方法:右击启动 情况:发现网页还是打不开.2.Internet信息服务-网站- ...
- 问题-delphi 程序在某电脑中显示???问号 乱码
问题现象:delphi 程序在某电脑中显示???问号 乱码 问题原因:因为语言的原因.不同的国家可能显示的编码不一样. 问题处理:“控制面板”>“区域和语言选项”>“区域选项”>“标 ...
- ubuntu压缩解压
ubuntu安装解压rar 一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简单的,只需要两个步骤就可 ...
- Ubuntu 12.04 升级到14.04之后,pidgin-sipe 出现的问题: Trouble with the pidgin and self-signed SSL certificate
Once again, I run into trouble when upgrading my LinuxMint. In last few days, my Linux mint notifies ...