windows映射模式

简介: 1.什么是映射模式: 当Windows应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用x和y 两个坐标表示,x表示横坐标,y表示纵坐标。在所有的GDI绘制函数中,这些坐标使用的是一 种"逻辑单位"。当GDI函数将输出送到某个物理设备上时,Windows将逻辑坐标 转换成设备坐标(如屏幕或打印机的像素点)。逻辑坐标和设备坐标的转换是由映射模式决 定的。

1.什么是映射模式:

当Windows应用程序在其客户区绘制图形时,必须给出在客户区的位置,其位置用x和y


两个坐标表示,x表示横坐标,y表示纵坐标。在所有的GDI绘制函数中,这些坐标使用的是一


种"逻辑单位"。当GDI函数将输出送到某个物理设备上时,Windows将逻辑坐标


转换成设备坐标(如屏幕或打印机的像素点)。逻辑坐标和设备坐标的转换是由映射模式决

定的。

 

2.windows中为什么要用到映射模式机制?

映射模式的使用可以实现图形绘制的设备无关性。比如在默认MM_TEXT模式下,当你的显示器分辨

率由1024*768调为800*600时你会发现你绘制的一条直线会变短,而当你使用 度量映射方式

MM_LOMETRIC时你会发现不论是在哪种分辨率下,直线的长度都是不会变化的。这里面就主要是

依靠映射模进行转换的。同样,当你在调用一个画线的GDI函数LineTo,画出25.4mm(1英寸)

长的线时,若显示设备是一个300dpi的激光打印机,Windows将利用设定的映射模式自动将其转化为

300个像素点。

 

3.逻辑坐标点到设备坐标点的映射过程:

设备坐标(以客户区坐标为例)和逻辑坐标可以看成是两个互相平行的坐标系

原点(0,0)的垂影重合,坐标轴方向相同(单位可不一样哦,设备坐标的单位为像素,逻辑坐标的单位

为mm,inch,twip等)水平值从左到右增大,垂直值从上到下增大。在默认情况下(MM_TEXT模式)

两个坐标系下的点式垂直映射的。当使用其他映射方式时,比如在MM_LOMETRIC映射模式下,我们的

调用函数时使用的(x,y)坐标点为逻辑坐标点,通过以下两个公式可以将逻辑点转换为设备点

xViewport=(xWindow-xWinOrg)*(xViewExt/xWinExt)+xViewOrg

yViewport=(yWindow-yWinOrg)*(yViewExt/yWinExt)+yViewOrg

然后在视口(设备坐标)中输出就可。

同时为了适应不同映射方式的需要,Windows提供了函数SetViewportOrgEx和SetWindowOrgEx

用来设置设备坐标系和逻辑坐标系的的映射方式,注意这里不是设置视口和窗口的原点,因为

设备坐标原点和逻辑坐标原点是不会变化的。(可以验证^_^。。。)

 

4. 映射模式的种类


Windows定义了表1所列出的8种映射方式。



    
MM_TEXT映射模式:

      这种映射模式被称为"文本"映射方式,不是因为它对于文本最合适,而是轴的方向与读文本的方向一

致。Windows提供了函数SetViewportOrg和SetWindowOrg 用来设置视口和窗口的原点。缺省的窗口原

点和视口原点均为(0,0),可以改变;缺省的窗 口范围和视口范围均为(1,1),不可改变。

度量映射方式:

MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH和MM_TWIPS 将1个逻辑单位映射

为固定的实际单位,其中1twip等于0.0176mm(1/1440英寸)。其他映射模式对应的物理单位参见表1。

设置了映射模式以后,Windows自动设置了窗口及视口的范围,范围本身的值并不重要,但范围比是一

个固定的值,对于MM_LOMETRIC,Windows计算范围比xViewExt/xWinExt=0.1mm中水平像素的点数。
              

自定义映射模式:

MM_ISOTROPIC和MM_ANISOTROPIC两种映射模式允许程序员设置自己的窗口和视口范围。

MM_ISOTROPIC和MM_ANISOTROPIC的区别是所设置的x轴和y轴的的范围必须相同,而

MM_ANISOTROPIC所设置的x轴和y轴的的范围可以不同。isotropi的意思是" 在所有方向相同",

anisotropic的意思正相反。自定义映射模式中窗口和视口的原点和范围都可以改变,

程序员可以设置自己需要的映射模式。

相关文章
|
2月前
|
存储 安全 数据安全/隐私保护
Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件
Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件
307 0
|
存储 分布式计算 安全
VMware 安装CentOS7配置环境、安装虚拟机、选择cd/dvd的方式安装系统、系统安装引导界面、需要定制化的内容、配置磁盘分区、修改主机名、网络配置、修改windows的主机映射文件(host
调整时间差、安装GHOME(图形化界面的方式)注意图上标注的点击顺序、添加boot、添加swap交换分区、配置根(/)目录、编辑VMware的网络配置、Windows的网络配置、虚拟机网络IP修改地址配置、修改主机名和hosts文件、配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts、关闭 kdump本身虚拟机内存就不够,他会吃掉一部分内存,我们尽量省一点、是否打开安全协议(开启与否都可以)、安装时间比较长大概需要10几分钟(设置root用户密码,一定要设置)、创建一个普通用户(可以不
VMware 安装CentOS7配置环境、安装虚拟机、选择cd/dvd的方式安装系统、系统安装引导界面、需要定制化的内容、配置磁盘分区、修改主机名、网络配置、修改windows的主机映射文件(host
|
5月前
|
Web App开发 Windows
Windows【Chrome浏览器 02】Auto Dark Mode for Web Contents 无需安装插件开启chrome浏览器黑暗模式
Windows【Chrome浏览器 02】Auto Dark Mode for Web Contents 无需安装插件开启chrome浏览器黑暗模式
85 0
|
6月前
|
存储 安全 API
3.5 Windows驱动开发:应用层与内核层内存映射
在上一篇博文`《内核通过PEB得到进程参数》`中我们通过使用`KeStackAttachProcess`附加进程的方式得到了该进程的PEB结构信息,本篇文章同样需要使用进程附加功能,但这次我们将实现一个更加有趣的功能,在某些情况下应用层与内核层需要共享一片内存区域通过这片区域可打通内核与应用层的隔离,此类功能的实现依附于MDL内存映射机制实现。
61 0
3.5 Windows驱动开发:应用层与内核层内存映射
|
7月前
|
Windows
[笔记] Windows内核课程:保护模式《二》段寄存器介绍
[笔记] Windows内核课程:保护模式《二》段寄存器介绍
|
7月前
|
存储 缓存 分布式数据库
[笔记]Windows核心编程《十七》内存映射文件(二)
[笔记]Windows核心编程《十七》内存映射文件(二)
|
7月前
|
缓存 Java 编译器
[笔记]Windows核心编程《十七》内存映射文件(一)
[笔记]Windows核心编程《十七》内存映射文件
|
7月前
|
缓存 编译器 调度
[笔记]Windows核心编程《七》用户模式下的线程同步
[笔记]Windows核心编程《七》用户模式下的线程同步
|
12月前
|
Linux Windows
Elasticsearch-03 CentOS7 / Windows上部署Elasticsearch5.6.16集群模式
Elasticsearch-03 CentOS7 / Windows上部署Elasticsearch5.6.16集群模式
97 0
|
开发工具 iOS开发 MacOS
windows虚拟机vim退出编辑模式
windows虚拟机vim退出编辑模式
419 0

热门文章

最新文章