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的意思正相反。自定义映射模式中窗口和视口的原点和范围都可以改变,
程序员可以设置自己需要的映射模式。
Windows操作系统:测试模式禁用数字签名 程序必须在特殊的启动环境下才能正常使用,尤其是一些非官方或者需要数字签名的驱动程序,而Windows测试模式可以帮助我们解决类似的问题,开启后会帮助我们禁用驱动程序强制签名
从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十三 || DTOs 对象映射使用,项目部署Windows+Linux完整版 代码已上传Github+Gitee,文末有地址 番外:时间真快,今天终于到了系统打包的日子,虽然项目还是有很多问题,虽然后边还有很多的内容要说要学,但是想着初级基本的.Net Core 用到的基本至少就这么多了(接口文档,项目框架,持久化ORM,依赖注入,AOP,分布式缓存,CORS跨域等等...
相关文章
- windows环境下pycharm配置conda虚拟环境,解决无法发现conda虚拟环境问题「建议收藏」
- Windows 下 MariaDB10.2.17 (zip 格式) 的安装教程
- Windows系统下HTTP(S)透明代理
- Windows+ Python3.6 安装 Mayavi 工具包(whl方法)
- 解决第三方邮箱APP登陆QQ、163邮箱无法验证账户名或密码的问题(IOS、MacOS、Windows、Android)
- Locust + Influxdb + Grafana性能测试(升级版)——分布式模式(Windows篇)
- 【开发环境】Windows 系统中使用 Makefile 构建脚本编译 C 程序 ( 下载并安装 TDM-GCC 编译器 | 配置环境变量 | 编译 Makefile 程序 )
- Linux下搭建Windows虚拟机的实现方案(linux下windows虚拟机)
- 在Windows中快速启动MySQL服务(windows启动mysql服务)
- Windows 11性能实测:多核竟然比Windows 10差了10%
- 服务在Windows系统上启动Redis服务(windows启动redis)
- 和 windows比较: Getty Linux 与 Windows(gettylinux)
- 一周开源新闻:信不信由你,Windows XP 上个月市场份额上升
- [下载] (简中/繁中) Windows 11 Build 22000.120版ISO 集成KB5005188补丁
- 比较Windows和Linux:哪一个更好?(windows好还是linux好)
- 同时安装Windows和Linux双系统(windows装linux双系统)
- 在Windows上安装Linux:体验双系统的乐趣(windows安装linux)
- 切换双系统:Linux与Windows的交互(linux和windows双系统)
- 如何在Windows下安装Linux系统(如何在windows下安装linux)
- 令人惊讶:用Windows编译Linux程序(windows编译linux程序)
- Linux安装轻松:Windows只一步之遥(linux装windows)
- 比较:Linux和Windows哪更适合你?(linux和windows哪个好)
- Linux与Windows: 抉择难题(linux与windows区别)
- Linux vs Windows:谁才是真正的王者?(linux与windows)
- 在Linux系统中安装Windows:自由选择的另一种可能性(linux下安装windows)