`
wgq837051
  • 浏览: 86069 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MFC坐标系统

MFC 
阅读更多

SetMapMode, SetWindowExt, SetViewportExt, SetViewportOrg, SetWindowOrgEx的用法总结:
这四个函数是我以前就不太会的,第一个最容易,我已经理解了。第二个我也已经清楚了,它是设定窗口的逻辑大小的,它只能用逻辑上的数字作为参数。它只能在MM_ISOTROPIC模式或是MM_ANISOTROPIC模式下有作用。另外它应该在SetViewportExt之前被调用。第三个函数和第二个函数相似,但它们的关系我很复杂,它同样也只在MM_ISOTROPIC和MM_ANISOTROPIC模式下有作用,它只能用物理坐标来作参数。下面分析一下它们的关系:这两个函数必须同时应用才能起作用。它们共同设定逻辑单位与设备单位之间的换算关系,SetWindowExt设定逻辑单位,SetViewportExt设定设备单位。如SetWindowExt(1000,1000)、SetViewportExt(rect.Width,rect.Heigt)的作用是将rect的宽和高这样大的区域设定成1000*1000的大小,即每个像素(设备单位)约是1000/rect.Width个逻辑单位。这两个函数中SetWindowExt的参数可以为负数,指定坐标的增减方向,横坐标为正时,自左向右增大,否则自左向右减小,竖坐标为正时,自上向下增大,为负时,自下向上增大。
第三个函数SetViewportOrg作用是将一个设备坐标设成逻辑坐标(0,0),如:SetViewportOrg(100,200)这里的(100,200)是设备坐标,它将设备坐标(100,200)设成逻辑坐标(0,0)。
第四个函数SetWindowOrgEx是将窗口的左上角(即设备坐标的(0,0))设成逻辑坐标。如:SetWindowOrgEx(20,50)是将左上角设成逻辑坐标(20,50)。这将影响坐标原点的位置。这两个函数一般只用一个。

 

 

MM_ISOTROPIC --〉长宽比例保持一致,相当于设备长宽比变了后,图形也不会变形

MM_ANISOTROPIC---〉长宽比例根据设备坐标的长宽自动调整,可以不成比例

 

 

 

 

用设备上下文绘图的函数,其坐标参数值都是值逻辑单位,在默认情况下,映射模式
  为MM_TEXT,也就是说每个逻辑单位1对应1个像素(设备单位)

1、窗口和视口(viewport)的概念
  窗口用逻辑范围表示大小,
  视口用设备范围表示大小
  这里所谓的窗口和视图只是一种大小范围的描述方式,主要是为了理解MapMode而划分的概念


2、逻辑单位和设备单位的映射
SetWindowExt() 设定窗口的逻辑范围
SetViewportExt() 设定视口的物理大小(参数值为设备单位,也就是像素大小)

SetWindowExt 必须要和SetViewportExt结合使用,并且只用在MM_ISOTROPIC和
MM_ANISOTROPIC 模式下。在MM_ISOTROPIC 模式下 SetWindowExt 必须在SetViewportExt之前调用


例如:
pDC->SetMapMode(MM_ISOTROPIC); // 等比例模式
pDC->SetWindowExt(1000, -1000); // 设置窗口设为1000*1000的矩形
pDC->SetViewportExt(500, 500); // 设置视图设为500*500像素的矩形,
// 由此可计算出每个像素对应2个逻辑单位:
// x坐标 1000/500 = 2, 向左为正向
// y坐标 -1000/500 = -2, 向左为负向

同理如下代码:
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(1000, 1000);
pDC->SetViewportExt(500, -500); 

产生的效果是和上述代码的效果是一样的




3、坐标原点,
默认情况下,逻辑坐标原点和设备坐标原点是一致的,都是(0, 0),即窗口左上角
设备坐标原点总是在左上角

可用如下像个函数改变(移动)逻辑坐标原点:
SetWindowOrg() // 将设备坐标原点(0, 0)映射为某个逻辑坐标点
SetViewportOrg() // 将某个设备坐标点映射为逻辑坐标原点(0, 0)

SetWindowOrg 和 SetViewportOrg 可起到相同的效果,一般只用其中一个

例如:
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(1000, 1000);
pDC->SetViewportExt(500, 500); // 由此可计算出每个设备坐标单位和逻辑单位的比例是 1:2

// 这两句的效果都是一样的
pDC->SetWindowOrg(-40, -40); // 将设备坐标原点(0, 0)设置映射逻辑坐标点(-40, -40)
// pDC->SetViewportOrg(20, 20); // 将设备坐标点(20, 20)映射为逻辑为逻辑坐标原点(0, 0)
// 为什么是20 呢?因为每个设备坐标单位和逻辑单位的比例是 1:2

pDC->Rectangle(0, 0, 500, 300); 

4、通过 SetMapMode 改变映射模式,关于MapMode, 各种MSDN说得很详尽了

分享到:
评论

相关推荐

    VC MFC坐标系统与坐标变换

    坐标系统与坐标变换 坐标系统与坐标变换 坐标系统与坐标变换 坐标系统与坐标变换

    Mytest1_MFC实现坐标系_以及基本图形的绘制_

    MFC实现坐标系,以及基本图形的绘制,矩形,多边形,圆形,椭圆

    C++_windows_API_MFC_SDK绘制坐标系统(笛卡尔坐标)曲线、点

    坐标系统的绘制,以及曲线,点的绘制。 特性:1.本程序采用面向对象思想设计; 2.具备很好的独立性,随时可以把这两个文件应 用在任意SDK、MFC开发中; 3.有良好的灵活性,扩展性,易用性,在稍微扩 展一下可以...

    MFC实现打开处理图像,直方图加坐标,显示系统时间,加入多线程,滑动条,关联对话框

    vs上在MFC实现打开并处理图像,对其直方图加坐标显示处理,显示系统时间,加入多线程,图像滑动条,关联对话框

    通过MFC设计一个系统钟表

    使用MFC平台创建一个可运行的系统钟表,代码内容很全,可直接运行,对初学MFC界面编程以及了解代码规范的同学非常有用,非常值得借鉴学习,欢迎下载!

    基于VC MFC的数据分析系统

    针对位置敏感探测器件构成的数据分析系统,借助Visual C++提供的软件代码自动生成可视化资源编辑的功能及MFC消息映射机制,设计了系统的人机交互界面。界面提供了选择位置敏感器件型号及输入系统修正参数的窗口;...

    基于mfc的左右键单击

    MFC的消息处理方式是采用消息映射的,一条消息对应一个处理函数,但对于系统消息来说此方法有点麻烦。其实MFC已经注意到这一点,对Windows系统定义的消息,采用的是更简单的处理方式,使用缺省的消息映射和消息处理...

    mfc画椭圆(无填充颜色)可鼠标画图也可输入坐标

    自己做的一个简单的mfc画椭圆系统 没有填充颜色

    MFC Dialog 控件随窗体调整动态缩放(第二版)

    1. 将控件屏幕坐标转换为窗体坐标后再进行缩放,修正了子对话框内空间动态缩放时坐标漂移的bug 2. 细分缩放枚举值 3. 将缩放比例值修改为成员变量,计算缩放比例代码移至OnSize()内避免重复计算 MFC Dialog 动态...

    深入浅出MFC【侯捷】

    配置GDI绘图工具 尺寸与方向:关于映射方式(坐标系统) 分页 页眉与页脚 动态计算页码 打印预览(Print Preview) 本章回顾 第13章 多重文件与多重显示 MDI和SDI 多重显示(Multiple Views) 窗口的动态切分 窗口的...

    基于MFC的图书管理系统

    b)趣味性功能:图标和光标美观化(图标会转动、光标是彩色图案)、工具栏的笑脸按钮提供生活正能量、右下角显示当前光标坐标(x,y)等。 三、系统详细设计思路 设计大思路:设计图书管理系统,采用了数据结构的思想...

    MFC教程入门知识全集.rar

    4.1 什么是MFC 以及MFC 的特点 (例子代码EX04-00) 4.2 MFC 应用程序框架 (例子代码EX04-01) 4.3 应用程序框架说明 4.4 文档-视图体系结构 4.4.1 文档-视图相互作用的函数 4.4.2 单文档-视图应用程序结构 ...

    C++MFC教程

    Visual C++MFC入门教程 目录 +-- 第一章 VC入门 |------ 1.1 如何学好VC |------ 1.2 理解Windows消息机制 |------ 1.3 利用Visual C++/MFC开发Windows程序的优势 |------ 1.4 利用MFC进行开发的通用方法介绍 |----...

    深入浅出MFC 2e

    尺寸与方向:关于映射方式(坐标系统) 分页 页眉与页脚 动态计算页码 打印预览(Print Preview) 本章回顾 第13章 多重文件与多重显示 MDI和SDI 多重显示(Multiple Views) 窗口的动态切分 窗口的静态切分 Create...

    c++ mfc 校园导航 最短路径计算

    在地图上有很多坐标点, 任意点击2点可以显示最短的连接路径, 进行导航 任意点击一点也显示当前坐标信息

    侯捷- -深入浅出MFC

    尺寸与方向:关于映射方式(坐标系统) 分页 页眉与页脚 动态计算页码 打印预览(Print Preview) 本章回顾 第13章 多重文件与多重显示 MDI和SDI 多重显示(Multiple Views) 窗口的动态切分 窗口的静态切分 Create...

    精通MFC (光盘) 源代码

    11.1.4 坐标变量和坐标映射 11.2 绘制图形 11.2.1 画线 11.2.2 绘制矩形 11.2.3 绘制椭圆 11.2.4 绘制弧线 11.2.5 绘制多边形 11.2.6 绘制贝济埃样条 11.2.7 使用路径 11.2.8 填充 11.2.9 区域 11.3 ...

    MFC打印预览

    MFC调用系统函数,封装成累, 打印前预览,预览后可打印,已经测试。主要的分页,获取DC等都有。其中要小心坐标系的对应,否则打印出来的就不是自己想要的效果

    MFC 简单的图形图像处理

    1.3题目要求:只考虑点、线、圆,点有横纵坐标,直线ax+by+c=0,圆有圆心半径。试说明几何形状,编写如数和输出图形数据,求两点距、交点,已知半径形成圆,已知两点形成直线等函数。 1. 分析各实体之间的关系、属性...

Global site tag (gtag.js) - Google Analytics