MFC学习笔记之坐标系
来源:互联网 发布:高中英语单词读音软件 编辑:程序博客网 时间:2024/05/16 11:42
Windows API主要使用四种坐标空间:世界坐标系空间、页面空间、设备空间、物理设备空间。其中,世界坐标系空间和页面空间是逻辑空间,其单位可以使毫米、英寸等,而设备空间和物理设备空间的单位则只能是像素。
实际绘图过程:首先从世界坐标系转换为页面坐标系,再从页面坐标系转换为设备坐标系,最后从设备坐标系转换为物理设备坐标系进行输出。
然而,一般而言,windows默认是从页面坐标系开始的,即没有从世界坐标系转换为页面坐标系这一过程。而且绘图过程的最后一步,即从设备坐标系转换为物理设备坐标系这一步,是由windows来完成的,没有任何函数可以去改变他,即程序员无法去控制这一步。一般而言,程序员所做的改变在第二步(从页面坐标系转换为设备坐标系)上。
如果希望绘图从世界坐标系开始,可调用SetGraphicsMode和SetWorldTransform这两个函数来实现。
SetGraphicsMode
函数原型:int SetGraphicsMode(HDC hdc, int iMode);
iMode可为GM_COMPATIBLE或GM_ADVANCED,其中GM_COMPATIBLE为缺省模式,在此模式下,SetWorldTransform这个函数是没有效果的。只有将iMode设置为GM_ADVANCED时,SetWorldTransform函数才会起效果。
SetWorldTransform
函数原型:BOOL SetWorldTransform(HDC hdc, CONST XFORM* lpXform );
XFORM结构体中包含了转换数据:eM11,eM12,eM21,eM22,eDx,eDy。
对任何世界坐标系空间中的坐标点(X、Y),页面空间中的转换坐标点(X'、Y')以下式来决定。
X'=X*eM11+Y*eM21+eDx
Y'=X*eM12+Y*eM22+eDy
值得注意的是在调用SetWorldTransform函数之前,一定要首先用SetGraphicsMode函数将iMode设置为GM_ADVANCED。
默认情况下,逻辑坐标系和设备坐标系是一样的。如果希望改变从逻辑坐标到设备坐标的映射关系,可调用SetMapMode函数。
SetMapMode
函数原型:int SetMapMode(HDC hdc, int fnMapMode);
fnMapMode参数就规定了逻辑坐标到设备坐标的映射方式,默认为MM_TEXT
- MFC学习笔记之坐标系
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- MFC学习笔记之:MFC运行机制
- MFC学习笔记之ClassWizard
- MFC学习笔记之CString
- MFC学习笔记之-对话框
- MFC学习笔记之对话框
- C++之MFC学习笔记
- Cocos2dx个人笔记之坐标系
- cocos2d-x学习之坐标系
- 《深入浅出MFC》学习笔记之二
- 《深入浅出MFC》学习笔记之二
- 《深入浅出MFC》学习笔记之二
- MFC学习笔记之菜单项
- MFC学习笔记之简单绘图一
- MFC学习笔记之简单绘图二
- MFC学习笔记之文本编程
- MFC学习笔记之菜单项
- Ext.toolbar.Toolbar工条
- Linux 脚本注解
- C语言中返回字符串函数的四种实现方法
- MixItUp:排序也能这么动感
- some advise to write Front end Engineer resume
- MFC学习笔记之坐标系
- Android应用之——利用getItemViewType为Listview的item设置不同的布局
- 查询文件中包含多少个指定的字符串
- MFC中的画刷CBrush
- Android xml 解析
- UML 中关系详解以及在visio中的表示
- 实训学习课——C#(第一篇)
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏之解决
- java web学习基础(一)