Windows绘图中的GDI映射模式
对Windows编程新手来说,GDI编程中最困难的部分就是映射模式(Mapping Mode)。
什么是映射模式?
我们知道,GDI画图是在设备描述表这个逻辑意义上的显示平面上进行,其使用的是逻辑坐标,简单地说,映射模式就是设备描述表的属性,用于确定从逻辑坐标到设备坐标值的转换方式。
Windows支持8中映射模式:MM_TEXT为默认。
/* Mapping Modes
#define MM_TEXT 1
#define MM_LOMETRIC 2
#define MM_HIMETRIC 3
#define MM_LOENGLISH 4
#define MM_HIENGLISH 5
#define MM_TWIPS 6
#define MM_ISOTROPIC 7
#define MM_ANISOTROPIC 8
*/
CDC* pDC = GetDC();
// 默认映射模式 MM_TEXT
pDC->Ellipse(0, 0, 100, 100);
// 设置映射模式 MM_LOMETRIC y向下为负 0.1mm
pDC->SetMapMode(MM_LOMETRIC);
pDC->Ellipse(0, 0, 100, -100);
// 设置映射模式 MM_HIMETRIC y向下为负 0.01mm
pDC->SetMapMode(MM_HIMETRIC);
pDC->Ellipse(0, 0, 100, -100);
// 设置映射模式 MM_LOENGLISH y向下为负 0.01in 0.254mm 1英寸(in)=25.4毫米(mm)
pDC->SetMapMode(MM_LOENGLISH);
pDC->Ellipse(0, 0, 100, -100);
// 设置映射模式 MM_HIENGLISH y向下为负 0.001in 0.0254mm 1英寸(in)=25.4毫米(mm)
pDC->SetMapMode(MM_HIENGLISH);
pDC->Ellipse(0, 0, 100, -100);
// 设置映射模式 MM_TWIPS y向下为负 0.0007in 1英寸(in)=25.4毫米(mm)
pDC->SetMapMode(MM_TWIPS);
pDC->Ellipse(0, 0, 100, -100);
/* 可编程映射模式 */
// 根据窗口尺寸按比例自动调节画图的输出大小
CRect rect;
GetClientRect(&rect);
// 各向异性 MM_ANISOTROPIC
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(100, 100);
pDC->SetViewportExt(rect.Width(), rect.Height());
pDC->Ellipse(0, 0, 100, 100);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(100, -100);
pDC->SetViewportExt(rect.Width(), rect.Height());
pDC->Ellipse(0, 0, 100, -100);
//各向同性 MM_ISOTROPIC
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(100, -100);
pDC->SetViewportExt(rect.Width(), rect.Height());
pDC->Ellipse(0, 0, 100, -100);
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(100, -100);
pDC->SetViewportExt(rect.Width(), rect.Height());
pDC->Ellipse(0, 0, 100, -100);
CDC::SetWindowExt 设定“窗口范围”
CDC::SetViewportExt 设定“视口范围”
可以这样认为,窗口的尺寸以逻辑单位计算,视口的尺寸以设备尺寸或像素点计算。
需要注意的是,在MM_ISOTROPIC模式下,应该首先调用SetWindowExt,否则部分窗口客户区可能会因落在窗口的逻辑范围之外而无法使用。
Windows绘图中的GDI映射模式相关推荐
- 在Windows Vista中禁用混合睡眠模式
Windows Vista has a neat new feature for laptops called "hybrid sleep". Actually, Windows ...
- Windows绘图-双缓冲-GDI初始化
hDeskTop = GetDesktopWindow();// 获取桌面窗口句柄 hDeskTopDC =GetDC(hDeskTop);//获取桌面窗口DC hMemDc = CreateComp ...
- MFC中的GDI绘图
MFC中的GDI绘图 目录(?)[+] 什么是GDI 什么是DC MFC中与GDI有关的类 获取设备环境 设置坐标映射 创建绘图工具并选入DC 调用DC绘图函数绘图 三坐标映射实例 一.关于GDI的基 ...
- CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识
From: http://blog.csdn.net/zhangxinrun/article/details/5829084 一.设备环境(DC)的概念 (1)在Windows中,显示工作是基于设备环 ...
- Windows编程中的映射模式和坐标转换
From: http://www.vczx.com/article/show.php?id=1011820 一.Windows中的映射模式 1.Windows定义映射模式的目的 经过我的综合,Wind ...
- eclipse下如何打开被关闭的项目_如何在Windows 10中打开和关闭平板电脑模式
默认情况下,将可转换计算机重新配置为平板电脑时,Windows 10会自动切换到平板电脑模式.如果你希望手动打开或关闭平板电脑模式,可以通过多种方法进行. 自动平板电脑模式在Windows 10中的工 ...
- geek_愚蠢的怪胎技巧:在Windows 7中启用秘密的“ How-To Geek”模式
geek We haven't told anybody before, but Windows has a hidden "How-To Geek Mode" that you ...
- VC++6.0中使用GDI+绘图(转载)
VC++6.0中使用GDI+绘图 1.在VC++6.0中配置GDI+环境 1.1 下载GDI+库 VC++6.0中没有GDI+库.可以从http://www.crazy-bit.com/downloa ...
- uac管理员程序_在Windows 10中创建没有UAC提示的管理员模式快捷方式
uac管理员程序 User Access Control (UAC) prompts in Windows 10 can be annoying, especially when you often ...
最新文章
- 基于OpenCV的网络实时视频流传输
- 本期最新 9 篇论文,每一篇都想推荐给你 | PaperDaily #14
- 【渝粤题库】陕西师范大学400010 当代西方社会思潮评析 作业(专升本)
- 电子路考容易犯错的五大细节
- java提取多行嵌套div/div内容的正则表达式_提取某一段div标签之间内容的正则表达式怎么写...
- TPAMI 2021 华为诺亚悉尼大学陶大程团队提出多功能卷积,助力轻量级网络
- api 原生hbase_hbase之java api实战一
- [NOIP2014] 寻找道路
- java writer 乱码_Java servlet 使用 PrintWriter 时的编码与乱码
- mysql 存储过程 高并发_解决数据库高并发常见方案
- 微信飞机小游戏java_Shoot Plane 仿微信打飞机游戏的java实现
- silverlight5 ToolKit下载地址
- STM32系统结构图理解及GPIO学习笔记
- 身份证归属地数据包下载
- 用Python玩玩OSMnx包获取道路数据并可视化分析
- 跨境电商如何制定社交媒体营销策略?
- 微信 Windows 版本干了件大事!
- 当代女性修身养性的箴言书——《读史做女人》
- mtk蓝牙Profile相关宏介绍
- 二叉树 红黑树 B树 B+树的优缺点
热门文章
- 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 2
- python网络爬虫(一):网络爬虫科普与URL含义
- Java社区对Java发布周期声明的反应
- 《HTML5+JavaScript动画基础》——2.4 JavaScript对象
- API的 Signature(签名)Token(令牌) 认证
- 《你必须知道的.NET》--简易不简单:认识枚举(Ⅲ)
- 《软件测试自动化之道》读书笔记 之 目录导航
- Java对Domino Objects的访问控制
- 组合算法 C++高效实现 (二进制辅助法)
- cocos2D中scheduleOnce的陷阱