windows程序设计之绘图基础之GDI映射模式
来源:互联网 发布:亚特兰大机场数据 编辑:程序博客网 时间:2024/05/21 07:06
Windows定义了8中映射模式,她们在WINGDI.H中定义的标识符如下:
映射模式逻辑单位X轴Y轴MM_TEXT像素右下MM_LOENGLISH0.1mm右上MM_HIMETRIC0.01mm右上MM_LOENGLISH0.01in右上MM_HIENGLISH0.001in右上MM_TWIPS1/1440in右上MM_ISOTROPIC任意(x=y)可选可选MM_ANISOTROPIC任意(x!=y)可选可选映射模式视口范围(x,y)窗口范围(x,y)MM_LOMETRIC(96,96)(254,-254)MM_HIMETRIC(96,96)(2540,-2540)MM_LOENGLISH(96,96)(100,-100)MM_HIENGLISH(96,96)(1000,-1000)MM_TWIPS(96,96)(1440,-1440)上面两个表格挺重要的。
映射模式可以由下面的函数设置
SetMapMode(hdc,iMapMode);
下面介绍几个重要的概念(截取自Windows程序设计第五版)
一、坐标系统
在Windows应用程序中,有两种坐标系统:设备坐标和逻辑坐标。
设备坐标系统直接与硬件设备的显示相关,以像素为度量单位。水平轴(X轴)的正方向从左向右,垂直轴(Y轴)的方向从上向下,并且整个坐标轴的单位和方向固定不变。
逻辑坐标系统与设备描述表的属性映射模式相关,它是一种允许自定义的坐标系统,坐标轴方向、单位和原点位置都可以重新定义。cm,mm,in等为单位
逻辑坐标系统下绘出的图形必须映射到设备坐标系统下,才能在屏幕上显示出来。
自我理解:逻辑坐标系统是自己写程序时使用的系统坐标,是逻辑思维层面上的,设备坐标系统是显示器的显示坐标系统,是视觉层面上的。
二、窗口和视口
窗口和视口是Windows GDI中两个很重要的概念,从逻辑坐标映射为设备坐标实际上就是从窗口到视口的映射。
视口是基于设备坐标的,它以像素为单位,且有视口原点和视口范围两个基本属性。在使用客户区设备坐标时,视口与客户区相同,视口原点在默认情况下位于客户区的左上角,Y轴向下为正方向。可以更改视口原点的位置,也可以更改坐标轴的正方向。
窗口是基于逻辑坐标的,窗口逻辑坐标的单位可以是像素、英寸等,还可以自定义。窗口也有窗口原点和窗口范围两个基本属性,窗口原点被映射到视口原点,窗口范围与视口范围的比值定义为映射的换算因子。
窗口和视口就是两个不同坐标系统下对应的显示方式。逻辑坐标对应窗口,设备坐标对应设备坐标系统。
SetWindowOrgEx设置窗口原点,SetViewportOrgEx设置视口原点
方便理解的点:
Org是汇编语言中高速机器代码存放在内存中的哪个地址。
Ex是前的意思
放大缩小倍数约等于窗口范围/适口范围(表格二中的倍数基本是不变的)
- SetMapMode(hdc,MM_LOENGLISH);
- SetViewportOrgEx(hdc,0,cyClient,NULL);
- SetMapMode(hdc,MM_LOENGLISH);
- SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL);
自定义的映射模式
- SetMapMode(hdc,MM_ISOTROPIC);
- SetWindowExtEx(hdc,cxClient,cyClient,NULL);//1:1比例
- SetViewportExtEx(hdc,cxClient,-cyClient,NULL);//这里为啥有个负数,待会解释
- SetViewportOrgEx(hdc,0,cyClient,NULL);
- SetMapMode(hdc,MM_ANISOTROPIC);
- SetWindowExtEx(hdc,1000,1000,NULL);
- SetViewportExtEx(hdc,cxClient,-cyClient,NULL);
- SetViewportOrgEx(hdc,0,cyClient,NULL);
有人不明白为什么这里用负数,按照下面的公式,就可以算出来是负数。
xViewport=(xWindow-xWindowOrg)*(xViewPortExt/xWindowExt)+xViewportOrg
yViewport=(yWindow-yWindowOrg)*(yViewPortExt/yWindowExt)+yViewportOrg
- windows程序设计之绘图基础之GDI映射模式
- windows程序设计之绘图基础之度量映射模式
- windows程序设计之绘图基础之自定义的映射模式
- windows程序设计之绘图基础之映射模式
- windows程序设计之绘图基础之GDI原理
- windows程序设计之绘图基础之GDI函数调用
- Windows程序设计:GDI映射模式
- 第五章 绘图基础 ( GDI映射模式 )
- windows程序设计绘图模式及映射模式
- windows程序设计之GDI简介
- windows程序设计之第五章绘图基础之Devcaps编程
- windows程序设计之绘图基础之设备的尺寸
- windows程序设计之绘图基础之设备的尺寸2
- windows程序设计之绘图基础之LineDraw问题解决
- windows程序设计之绘图基础之用画刷填充内部
- C语言Windows程序设计 -> 第九天 -> GDI绘图基础
- GDI基础介绍之几何绘图
- GDI绘图之画图
- LOGCAT里面出现UNABLE TO OPEN LOG DEVICE ‘/DEV/LOG/MAIN': NO SUCH FILE OR DIRECTORY 的解决办法
- 利用spring rest返回json数据时,客户端返回406错误
- java 异常 之 实战篇(trows 和 try catch Dead Code)
- Device Memory Spaces
- 题目1050:完数 题目1060:完数VS盈数
- windows程序设计之绘图基础之GDI映射模式
- 菜单和加速键
- opencv学习1——Mat介绍
- Android 学习笔记 第五季 4 Size Qualifiers
- 八皇后
- 【 D3.js 进阶系列 — 2.2 】 力学图的参数
- nginx运维(1)nginx php mysql安装测试
- HDU 3131 One…Two…Five! (暴力搜索)
- jQuery??学还是不学 --- Dmore 来谈谈