对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映射模式相关推荐

  1. 在Windows Vista中禁用混合睡眠模式

    Windows Vista has a neat new feature for laptops called "hybrid sleep".  Actually, Windows ...

  2. Windows绘图-双缓冲-GDI初始化

    hDeskTop = GetDesktopWindow();// 获取桌面窗口句柄 hDeskTopDC =GetDC(hDeskTop);//获取桌面窗口DC hMemDc = CreateComp ...

  3. MFC中的GDI绘图

    MFC中的GDI绘图 目录(?)[+] 什么是GDI 什么是DC MFC中与GDI有关的类 获取设备环境 设置坐标映射 创建绘图工具并选入DC 调用DC绘图函数绘图 三坐标映射实例 一.关于GDI的基 ...

  4. CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别-Windows绘图基础知识

    From: http://blog.csdn.net/zhangxinrun/article/details/5829084 一.设备环境(DC)的概念 (1)在Windows中,显示工作是基于设备环 ...

  5. Windows编程中的映射模式和坐标转换

    From: http://www.vczx.com/article/show.php?id=1011820 一.Windows中的映射模式 1.Windows定义映射模式的目的 经过我的综合,Wind ...

  6. eclipse下如何打开被关闭的项目_如何在Windows 10中打开和关闭平板电脑模式

    默认情况下,将可转换计算机重新配置为平板电脑时,Windows 10会自动切换到平板电脑模式.如果你希望手动打开或关闭平板电脑模式,可以通过多种方法进行. 自动平板电脑模式在Windows 10中的工 ...

  7. geek_愚蠢的怪胎技巧:在Windows 7中启用秘密的“ How-To Geek”模式

    geek We haven't told anybody before, but Windows has a hidden "How-To Geek Mode" that you ...

  8. 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 ...

  9. uac管理员程序_在Windows 10中创建没有UAC提示的管理员模式快捷方式

    uac管理员程序 User Access Control (UAC) prompts in Windows 10 can be annoying, especially when you often ...

最新文章

  1. 基于OpenCV的网络实时视频流传输
  2. 本期最新 9 篇论文,每一篇都想推荐给你 | PaperDaily #14
  3. 【渝粤题库】陕西师范大学400010 当代西方社会思潮评析 作业(专升本)
  4. 电子路考容易犯错的五大细节
  5. java提取多行嵌套div/div内容的正则表达式_提取某一段div标签之间内容的正则表达式怎么写...
  6. TPAMI 2021 华为诺亚悉尼大学陶大程团队提出多功能卷积,助力轻量级网络
  7. api 原生hbase_hbase之java api实战一
  8. [NOIP2014] 寻找道路
  9. java writer 乱码_Java servlet 使用 PrintWriter 时的编码与乱码
  10. mysql 存储过程 高并发_解决数据库高并发常见方案
  11. 微信飞机小游戏java_Shoot Plane 仿微信打飞机游戏的java实现
  12. silverlight5 ToolKit下载地址
  13. STM32系统结构图理解及GPIO学习笔记
  14. 身份证归属地数据包下载
  15. 用Python玩玩OSMnx包获取道路数据并可视化分析
  16. 跨境电商如何制定社交媒体营销策略?
  17. 微信 Windows 版本干了件大事!
  18. 当代女性修身养性的箴言书——《读史做女人》
  19. mtk蓝牙Profile相关宏介绍
  20. 二叉树 红黑树 B树 B+树的优缺点

热门文章

  1. 保持Service不被Kill掉的方法--双Service守护 Android实现双进程守护 2
  2. python网络爬虫(一):网络爬虫科普与URL含义
  3. Java社区对Java发布周期声明的反应
  4. 《HTML5+JavaScript动画基础》——2.4 JavaScript对象
  5. API的 Signature(签名)Token(令牌) 认证
  6. 《你必须知道的.NET》--简易不简单:认识枚举(Ⅲ)
  7. 《软件测试自动化之道》读书笔记 之 目录导航
  8. Java对Domino Objects的访问控制
  9. 组合算法 C++高效实现 (二进制辅助法)
  10. cocos2D中scheduleOnce的陷阱