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]——自定义平面直角坐标系相关推荐

  1. C++/MFC工程[4]——绘制直线段

    一.MoveTo()函数和LineTo()函数 本文实例均于 ***View().cpp文件中的OnDraw()函数中实现. 两函数在上上节C++/MFC工程[2]--自定义平面直角坐标系中已经有所应 ...

  2. 空间直角坐标系、大地坐标系、平面坐标系、高斯平面直角坐标系

    1.空间直角坐标系 空间直角坐标系的坐标原点位于参考椭球的中心,Z轴指向参考椭球的北极,X轴指向起始子午面与赤道的交点,Y轴位于赤道面上切按右手系于X轴呈90度夹角,某点中的坐标可用该点在此坐标系的各 ...

  3. 如何用电脑画平面坐标图_如何画平面直角坐标系

    在几何画板中,其自带的自定义工具下包含了许多已经做好的工具,绘图时灵活使用它们,便能省去大量时间.鼠标按住左侧自定义工具图标不放,会出现几个坐标系自定义工具,下面小编给大家来介绍下这几个坐标系工具,讲 ...

  4. 空间直角坐标系、大地坐标系、平面坐标系、高斯平面直角坐标系(转)

    本篇学习了空间直角坐标系.大地坐标系.平面坐标系.高斯平面直角坐标系.这个个坐标系有时很容易弄混淆! ( 一)空间直角坐标系     空间直角坐标系的坐标原点位于参考椭球的中心,Z轴指向参考椭球的北极 ...

  5. 高斯-克吕格尔平面直角坐标系详解

    高斯-克吕格尔平面直角坐标系 Gauss-Krüger plane rectangular coordinates system 根据高斯-克吕格尔投影所建立的平面坐标系,或简称高斯平面坐标系.它是大 ...

  6. C++/MFC工程[3]——像素点的绘制

    一.使用GDI对象绘图时遵循的三个步骤 1.绘图开始前,创建一个新的GDI对象,并选入当前设备上下文中,同时保持指向原GDI对象的指针: 2.使用新的GDI对象绘图: 3.绘图结束后,使用已保存的原G ...

  7. VS如何新建一个基于对话框的MFC工程并添加按钮

    学习MFC的初学者,入门的步骤很重要,新建一个基于对话框的MFC应用程序,并通过拖拉按钮等,初步搭建自己的MFC工程. 工具/原料 笔记本电脑 VS2010 方法/步骤 打开VS2010,并新建MFC ...

  8. 非MFC工程中使用MFC库

    需求说明 C++工程的类型有很多,从VS(或VC)可以看到常见的有:Win32 Console Application.MFC Application.Win32 Project等.在创建MFC工程时 ...

  9. mfc工程中添加com接口支持

    在普通的mfc工程中常常需要添加com接口支持.最典型的应用就是使用 com中的连接点机制时,需要在客户端实现事件接受器.简单说来,就是要实现在com服务器端声明的事件接口.这个接口由server端暴 ...

最新文章

  1. Drawable Resource 之旅(一):BitmapDrawable 详解
  2. [转]解决IE下CSS背景图片闪烁的Bug
  3. 初探 RabbitMQ 消息队列
  4. 中props使用this报错_为什么在静态方法中不能使用this
  5. 【Mybatis笔记】mybatis实现mysql增删改查
  6. android 获取网卡mac_android 获取MAC地址
  7. 2021年淮南高考成绩查询,2021年淮南高考最高分多少分,历年淮南高考状元
  8. Django之POST GET与前后端交互
  9. LINQ体验(14)——LINQ to SQL语句之存储过程 夺表
  10. 兔子的烦恼(一)【NYOJ】
  11. armv6、armv7、armv7s、arm64 与开发静态库(.a)
  12. 记录一次CenterOS7中xmrig挖矿病毒的排查测试
  13. jquery实现点击图片放大功能
  14. 灰色关联分析与预测模型
  15. linux ps auxf,ps -aux命令详解
  16. 罗马音平假名中文可复制_打上花火歌词,日文/罗马音/中文
  17. 计算机夏令营、预推免面试经验【北理cs,北航cs,复旦cs大数据,浙大cs】
  18. 表不存在,但是可以查询、删除(没有返回结果,一直hang住)
  19. 一、软件/软件工程/软件开发模型概述
  20. 华为关于LINUX的认证,华为认证:华为TA128在LINUX下的简单设置

热门文章

  1. 尽快溶入团队,打出自己的身价
  2. 1.txt docx zip 文件夹的新建与打开
  3. postgresql日期相关函数
  4. Linux绑核效率优化
  5. 使用vue-video-player做H5直播播放
  6. 计算机无线网络怎么连接,Win7电脑如何连接无线网络
  7. 走过,路过,不要错过!经典语录全集!
  8. 【维生素C语言】第一章 - 初识C语言
  9. 最大类间方差法Ostu的C++实现
  10. ug安装时 无法修改服务器名,ug安装无效的服务器名称