VC自定义坐标系:实现可变比例映射
4星 · 超过85%的资源 需积分: 48 161 浏览量
更新于2024-10-30
收藏 223KB DOC 举报
"VC在对话框中通过编程方式创建自定义坐标系,涉及图形绘制、设备上下文(Device Context, DC)以及坐标映射模式。本文档主要介绍如何在MFC对话框应用中,利用固定比例和可变比例映射模式来改变坐标系的显示效果。"
在VC++开发中,当需要在对话框中进行图形绘制时,通常会遇到需要自定义坐标系的情况。默认的坐标系是MM_TEXT模式,它直接将设备单位(像素)与逻辑坐标对应。然而,有时候我们需要根据需求调整这个映射关系,例如创建可变比例的坐标系统。
首先,了解设备上下文(DC)的概念。DC是Windows用于图形绘制的一个抽象,它包含了与特定设备相关的图形输出信息,比如窗口或打印机。在MFC中,可以通过`GetDC()`函数获取到对话框控件的DC。
在本例中,作者创建了一个对话框应用程序,并在其中放置了两个图片框控件,一个用于绘制,另一个用于对比。在初始化函数`OnInitDialog()`中,通过`SetWindowPos()`函数改变了图片框的大小,这允许我们控制可视区域的尺寸。
接下来,重点是改变坐标映射模式。Windows图形设备接口(GDI)提供了多种映射模式,如MM_TEXT、MM_LOMETRIC、MM_HIMETRIC等。在本例中,作者关注的是固定比例映射模式(如MM_TEXT)和可变比例映射模式。
固定比例映射模式(如MM_TEXT)保持每个逻辑单位与设备单位一致,不进行缩放。而可变比例映射模式则允许我们自定义坐标系的范围和比例,从而在相同的物理空间内显示不同的逻辑范围。
为了实现可变比例映射,需要使用`SetMapMode()`函数来改变DC的映射模式。例如,如果想将默认的(0,0,512,120)映射到(0,400,1024,-480),可以先调用`SetMapMode(hdc, MM_ANISOTROPIC)`来设定可变比例映射模式,然后使用`SetWindowExtEx()`和`SetViewportExtEx()`来分别设置逻辑窗口和视口的扩展,调整坐标比例。
```cpp
// 设置可变比例映射模式
hdc.SetMapMode(MM_ANISOTROPIC);
// 设置逻辑窗口的大小(原始坐标系)
hdc.SetWindowExtEx(512, 120, NULL);
// 设置视口的大小(新的坐标系)
hdc.SetViewportExtEx(1024, -480, NULL);
```
完成这些设置后,我们就可以在新的坐标系下进行绘图。在可变比例模式下,相同的逻辑坐标会对应到不同大小的物理位置,从而达到改变坐标系的效果。
最后,需要注意的是,每次绘制完成后,应恢复原来的映射模式,以免影响其他控件的正常显示。这通常通过`SetMapMode(hdc, MM_TEXT)`来实现。
通过理解设备上下文、坐标映射模式以及相应的API函数,开发者可以在VC++的对话框中自由地创建和操作自定义坐标系,实现复杂的图形绘制需求。
2022-09-19 上传
202 浏览量
点击了解资源详情
2009-02-23 上传
2012-03-04 上传
2019-01-03 上传
225 浏览量
143 浏览量
2010-08-12 上传
d0113150746
- 粉丝: 1
- 资源: 4
最新资源
- capistrano-memcached:Capistrano 任务用于自动和合理的内存缓存配置
- lab33-CAP-APWM,c#医院缴费系统源码,c#
- HBD-Chrome-Extension-crx插件
- IO_2020_2021_QuadclubApp:罗兹大学软件工程课程中实施的项目
- qr-code-generator-chrome-extension:Chrome扩展程序-一键QR代码生成器
- 美味
- StudentManagementSystem
- 龙卷风图:这会根据指定的灵敏度值创建龙卷风图。-matlab开发
- abc,c#bs框架源码,c#
- jerseywildfly:Projeto utilizando实现工具Eclipse Jersey https:eclipse-ee4j.github.io
- Create-Your-Own-Image-Classifier-Project-Submission:创建自己的图像分类器项目提交
- AzureDevOps
- distractor_neurons
- poject1:项目描述
- GCMT:Gentoo集群管理工具-开源
- stm32motor,c#开启动画源码,c#