C++/MFC工程[2]——自定义平面直角坐标系
1、坐标系
我们所熟知的二维平面坐标系如下左图所示,向右为X轴正方向,向上为Y轴正方向,原点一般位于中央,具有I、II、III、IV四个象限。
而计算机屏幕默认的坐标系,原点位于左上方,向右为X轴正方向,向下为Y轴正方向,如上右图所示。
2、默认坐标系下的示例
在实际应用中,若是需要用到我们所熟知的坐标系,该如何实现呢?
首先打开上一篇中,我们所建立的项目,在源文件“View.cpp”中找到OnDraw函数,这一函数用于实现图形绘制。
参数部分默认是注释掉的,即默认为 ::OnDraw(CDC* /*pDC */),我们在使用的时候需要将CDC类的指针pDC释放出来(如上图)。
于OnDraw函数对应位置添加下述代码,点击运行,可以看到下面的结果,我们如愿得到了一条水平线、竖直线,一条斜线。
//简单绘制直线
//绘制水平线
pDC->MoveTo(50, 50);//定义起点
pDC->LineTo(300, 50);//定义终点
//绘制竖直线
pDC->MoveTo(50, 100);//定义起点
pDC->LineTo(50, 300);//定义终点
//绘制斜线
pDC->MoveTo(200, 200);//定义起点
pDC->LineTo(400, 400);//定义终点
关于MoVeTo函数和LineTo函数,这里不多介绍,只需简单理解为,前者用来定义起点,后者用来定义终点,两个参数分别为横纵坐标值。
正如上文所说,此处的坐标系为默认坐标系,原点位于屏幕左上方。
3、自定义坐标系
// TODO: 在此处为本机数据添加绘制代码CRect rect;//不是单纯的一个数值GetClientRect(rect);pDC->SetMapMode(MM_ANISOTROPIC);//变量是一种映射模式;->:指向成员运算符pDC->SetWindowExt(rect.Width(), rect.Height());//设置窗口大小(宽度、高度)pDC->SetViewportExt(rect.Width(), -rect.Height());//设置视区的大小,使Y轴向上pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);//设置原点位置rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);//偏移函数,向左偏移//绘制水平线pDC->MoveTo(50, 50);//定义起点pDC->LineTo(300, 50);//定义终点//绘制竖直线pDC->MoveTo(50, 100);//定义起点pDC->LineTo(50, 300);//定义终点//绘制斜线pDC->MoveTo(200, 200);//定义起点pDC->LineTo(400, 400);//定义终点
CRect类与Windows RECT结构相似,在传递LPRECT或RECT结构作为参数的任何地方,都可以传递CRect对象来代替。
在绘制前使用CRect类对坐标系进行自定义,窗口大小与默认大小相同,翻转Y轴的位置,使其正方向向上;然后将原点设置为窗口大小半宽、半高的位置(即窗口中心位置),点击运行,结果如下。
不难发现,此时绘制出的直线位置是我们所熟知的坐标系下的位置。
自定义坐标系的内容就到这里啦,感兴趣的同学可以查找相关的资料,做更多的尝试哦。
C++/MFC工程[2]——自定义平面直角坐标系相关推荐
- C++/MFC工程[4]——绘制直线段
一.MoveTo()函数和LineTo()函数 本文实例均于 ***View().cpp文件中的OnDraw()函数中实现. 两函数在上上节C++/MFC工程[2]--自定义平面直角坐标系中已经有所应 ...
- 空间直角坐标系、大地坐标系、平面坐标系、高斯平面直角坐标系
1.空间直角坐标系 空间直角坐标系的坐标原点位于参考椭球的中心,Z轴指向参考椭球的北极,X轴指向起始子午面与赤道的交点,Y轴位于赤道面上切按右手系于X轴呈90度夹角,某点中的坐标可用该点在此坐标系的各 ...
- 如何用电脑画平面坐标图_如何画平面直角坐标系
在几何画板中,其自带的自定义工具下包含了许多已经做好的工具,绘图时灵活使用它们,便能省去大量时间.鼠标按住左侧自定义工具图标不放,会出现几个坐标系自定义工具,下面小编给大家来介绍下这几个坐标系工具,讲 ...
- 空间直角坐标系、大地坐标系、平面坐标系、高斯平面直角坐标系(转)
本篇学习了空间直角坐标系.大地坐标系.平面坐标系.高斯平面直角坐标系.这个个坐标系有时很容易弄混淆! ( 一)空间直角坐标系 空间直角坐标系的坐标原点位于参考椭球的中心,Z轴指向参考椭球的北极 ...
- 高斯-克吕格尔平面直角坐标系详解
高斯-克吕格尔平面直角坐标系 Gauss-Krüger plane rectangular coordinates system 根据高斯-克吕格尔投影所建立的平面坐标系,或简称高斯平面坐标系.它是大 ...
- C++/MFC工程[3]——像素点的绘制
一.使用GDI对象绘图时遵循的三个步骤 1.绘图开始前,创建一个新的GDI对象,并选入当前设备上下文中,同时保持指向原GDI对象的指针: 2.使用新的GDI对象绘图: 3.绘图结束后,使用已保存的原G ...
- VS如何新建一个基于对话框的MFC工程并添加按钮
学习MFC的初学者,入门的步骤很重要,新建一个基于对话框的MFC应用程序,并通过拖拉按钮等,初步搭建自己的MFC工程. 工具/原料 笔记本电脑 VS2010 方法/步骤 打开VS2010,并新建MFC ...
- 非MFC工程中使用MFC库
需求说明 C++工程的类型有很多,从VS(或VC)可以看到常见的有:Win32 Console Application.MFC Application.Win32 Project等.在创建MFC工程时 ...
- mfc工程中添加com接口支持
在普通的mfc工程中常常需要添加com接口支持.最典型的应用就是使用 com中的连接点机制时,需要在客户端实现事件接受器.简单说来,就是要实现在com服务器端声明的事件接口.这个接口由server端暴 ...
最新文章
- Drawable Resource 之旅(一):BitmapDrawable 详解
- [转]解决IE下CSS背景图片闪烁的Bug
- 初探 RabbitMQ 消息队列
- 中props使用this报错_为什么在静态方法中不能使用this
- 【Mybatis笔记】mybatis实现mysql增删改查
- android 获取网卡mac_android 获取MAC地址
- 2021年淮南高考成绩查询,2021年淮南高考最高分多少分,历年淮南高考状元
- Django之POST GET与前后端交互
- LINQ体验(14)——LINQ to SQL语句之存储过程 夺表
- 兔子的烦恼(一)【NYOJ】
- armv6、armv7、armv7s、arm64 与开发静态库(.a)
- 记录一次CenterOS7中xmrig挖矿病毒的排查测试
- jquery实现点击图片放大功能
- 灰色关联分析与预测模型
- linux ps auxf,ps -aux命令详解
- 罗马音平假名中文可复制_打上花火歌词,日文/罗马音/中文
- 计算机夏令营、预推免面试经验【北理cs,北航cs,复旦cs大数据,浙大cs】
- 表不存在,但是可以查询、删除(没有返回结果,一直hang住)
- 一、软件/软件工程/软件开发模型概述
- 华为关于LINUX的认证,华为认证:华为TA128在LINUX下的简单设置