版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在用VC绘图的时候,需要自定义坐标系,即改变坐标的映射模式,在网上查找了很多相关的知识,也还是很糊涂,天极网上有一篇文章(有位Hier也转载了这篇文章,或者也许他就是作者),图文并貌,稍微详细一些,但也只是侧重讲解了固定比例映射模式,而可变比例模式只是一带而过了。后来自己写了程序进行测试,终于明白了可变比例映射模式,与大家分享。讲理论我不在行,一些迫切需要这方面知识的网友看起来也费劲,我们就来看一个例子吧:假设我们进行如下图所示的坐标变换:将默认坐标系(MM_TEXT)下的矩形(0,0,512,120),变成可变比例映射模式下的(0,400,1024,-480)。注意,前两位是左上角的坐标,后两位是该坐标系下长和宽的值,负号表示方向,而且,长和宽的实际长度并未改变,改变的只是坐标的比例。(0,0).(1024,400)(0,100)(0,0)(512,120)(1024,-80)首先,我们利用MFCAppWizard创建一个对话框类型的应用程序(我的工程名叫DrawTest2)。在对话框主界面上删除不必要的控件,放置两个一样大小的图片框(取名分别为IDC_STATIC_PIC,IDC_STATIC_PIC2,第二个图片框是用来对比的),如图所示:
此时,我们无法控制图片框的大小,不像VB,可以在控件的属性中直接设置它的长宽。我们需要在初始化函数中使用SetWindowPos函数来改变图片框的大小,SetWindowPos函数使用在一些Hier的博客上有很详细的讲解。BOOLCDrawTest2Dlg::OnInitDialog().{//...〃调整控件大小,pWnd,pDc已经是类的成员变量pWnd=GetDlgItem(IDC_STATIC_PIC);pWnd->SetWindowPos(NULL,0,0,512,120,SWP_NOZORDER|SWP_NOMOVE);//调整长宽为(512,120)pDc=pWnd->GetDC();returnTRUE;}运行后的结果:
此时,图片框1的长和宽就变成(512,120),单位是像素。(MM_TEXT坐标映射模式:每一个逻辑单位对应一个像素)接下来开始改变坐标系,使用SetViewPortExt(),SetWindowExt()函数。坐标的比例关系是长512:1024,宽120:-480,即1:2,1:-4。所以我们用下面的语句来完成坐标变换。pDc->SetMapMode(MM_ANISOTROPIC);〃首先设置模式为可变比例模式pDc->SetViewportExt(1,1);pDc->SetWindowExt(2,-4);执行了上述语句后,坐标系就变成了这样,如下图所示:A(0,0) (1024,0)(0t-400)(1024,-480)我们来验证一下:voidCDrawTest2Dlg::OnButton1(){CPenPenRed;PenRed.CreatePen(PS_SOLID,1,RGB(255,0,0));CPen*OldPen=pDc->SelectObject(&PenRed);pDc->MoveTo(0,120);pDc->LineTo(512,0);//从左下角到右上角的一条红色直线pDc->SetMapMode(MM_ANISOTROPIC);//可变比例模式pDc->SetViewportExt(1,1);pDc->SetWindowExt(2,-4);CPenPenGreen;PenGreen.CreatePen(PS_SOLID,1,RGB(0,255,0));pDc->SelectObject(&PenGreen);pDc->MoveTo(0,0);pDc->LineTo(1024,-480);〃从左上角到右下角的一条绿色直线}运行后的结果:接下来我们还要改变原点的位置。使用SetViewportOrg(x,y),但此时的疑问是,这里的(x,y)坐标是以什么坐标系为参考的呢,如果以改变前的坐标系,即默认坐标系为参考,则(x,y)为(0,100),但如果以改变后的坐标系为参照的话,那么(x,y)为(0,-400)。经过测试验证,(x,y)是以默认坐标系为参照的,即SetViewportOrg()函数完全不受坐标映射的影响。(x,y)应该为(0,100)。我们来验证一下:voidCDrawTest2Dlg::OnButton1(){CPenPenRed;PenRed.CreatePen(PS_SOLID,1,RGB(255,0,0));CPen*OldPen=pDc->SelectObject(&PenRed);pDc->MoveTo(0,120);pDc->LineTo(512,0);//从左下角到右上角的一条红色直线pDc->SetMapMode(MM_ANISOTROPIC);〃!可变比例模式pDc->SetViewportExt(1,1);pDc->SetWindowExt(2,-4);CPenPenGreen;PenGreen.CreatePen(PS_SOLID,1,RGB(0,255,0));pDc->SelectObject(&PenGreen);pDc->MoveTo(0,0);pDc->LineTo(1024,-480);〃从左上角到右下角的一条绿色直线pDc->SetViewportOrg(0,100);〃改变原点CPenPenBlue;PenBlue.CreatePen(PS_SOLID,1,RGB(0,0,255));pDc->SelectObject(&PenBlue);pDc->MoveTo(0,0);pDc->LineTo(1024,400);〃从原点到右上角的一条蓝色直线pDc->MoveTo(0,0);pDc->LineTo(1024,-80);〃从原点到左下角的一条蓝色直线}运行后的结果:基于可变比例映射模式完
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东中山大学肿瘤防治中心中心泌尿外科尧凯教授课题组自聘技术员招聘1人笔试模拟试题及答案解析
- 2025广东江门市江海区江南街道办事处专职消防员招聘6人备考题库附答案
- 2025年玉树州公安局面向社会公开招聘警务辅助人员(第二批)考试备考题库附答案
- 2025年安徽省能源集团有限公司校园招聘60人笔试备考试题附答案
- 2025年滁州理想建设投资发展有限公司公开招聘2名参考题库附答案
- 2025年上海工程技术大学公开招聘(第四批)(公共基础知识)测试题附答案
- 2025年黑龙江省铁路集团有限责任公司面向社会公开招聘1人备考题库附答案
- 2025山西忻州市人民医院和忻州市中医医院市招县用招聘工作人员10人备考题库附答案
- 2025年广西民族印刷包装集团有限公司招聘14人笔试备考试题附答案
- 2026中国人民银行清算总中心直属企业中志支付清算服务(北京)有限公司招聘2人笔试参考题库及答案解析
- 2026年共青团中央所属单位招聘66人备考题库及答案详解一套
- 人民警察法培训课件
- 2026年哈尔滨职业技术学院单招职业适应性考试题库参考答案详解
- 2025云南昆明巫家坝建设发展有限责任公司及下属公司第四季度社会招聘31人历年真题汇编带答案解析
- 输尿管切开取石课件
- 小猫绝育协议书
- 66kV及以下架空电力线路设计标准
- 人工搬运培训课件
- 2025年浙江乍浦经济开发区(嘉兴港区)区属国有公司公开招聘28人笔试考试备考试题及答案解析
- 胃肠外科危重患者监护与护理
- 2025年榆林神木市信息产业发展集团招聘备考题库(35人)及答案详解(新)
评论
0/150
提交评论