MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系

简介: MFC绘制二维图形【1】—— 使用映射模式函数自定义坐标系

一、创建Test工程

1、新建单文档项目

2、绘制二维图像实在CTestView类中的OnDraw函数,OnDraw函数中被注释的指针PDc要放开(纯虚函数

3、在MFC框架中,窗口显示的是像素,屏幕以像素为基准。

二、自定义坐标系

三、映射模式(MapMode)

image.png

四、映射模式函数

1)设置映射模式函数

       原型:virtual int SetMapMode(int nMapMode);


       参数:nMapMode用于指定新的映射模式,可常取MM_ANISOTROPIC。


       MM_ANISOTROPIC是窗口范围和设备范围可以任意改变,要求使用SetWindowExt函数设置窗口的范围,使用SetViewPortExt函数设置视区的范围。

2)设置窗口范围函数

       原型:virtual CSize SetWindowExt(int cx,int cy);

       参数:cx窗口x范围的逻辑单位,cy窗口y范围的逻辑单位;

3)设置视区范围函数

       原型:virtual CSize SetViewportExt(int cx,int cy);

       参数:cx视区x范围的设备单位,cy视区y范围的设备单位;

4)设置视区原点函数

       原型“:virtual CPoint SetViewportOrg(int x,int y);

       参数:x,y是视区新原点的设备坐标;

5)偏移矩形函数

       原型:void OffsetRect(int x,int y);

       参数:x左右偏移量,y上下偏移量;

  // TODO: 在此处为本机数据添加绘制代码
  CRect rect; //定义一个矩形对象
  GetClientRect(rect);//初始化(rect不是一个数值,很多属性)
  //使用映射模式函数
  pDC->SetMapMode(8);
  //设置窗口的大小
  pDC->SetWindowExt(rect.Width(),rect.Height());//矩形的宽高作为窗口大小
  //设置视区大小
  pDC->SetViewportExt(rect.Width(),-rect.Height());
  //圆点
  pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);
  //此时矩形位置随坐标系变化,应该是在右上角,需要进行平移
  rect.OffsetRect(-rect.Width() / 2,-rect.Height() / 2);
  //绘制一个三角形
  CPoint P0(-200, -100), P1(200, -100), P2(0,200);
  pDC->MoveTo(P0);
  pDC->LineTo(P1);
  pDC->LineTo(P2);
  pDC->LineTo(P0);

五、 不改变映射模式修改坐标系

    CRect rect;
    GetClientRect(&rect);
    int nClientWidth = rect.Width();
    int nClientHeight = rect.Height();
    int nHWidth = nClientWidth/2;
    int nHHeigh = nClientHeight/2;
  CPoint P0(-200, -100), P1(200, -100), P2(0,200);
  pDC->MoveTo(nHWidth + P0.x,nHHeight - P0.y);
  pDC->LineTo(nHWidth + P1.x,nHHeight - P1.y);
  pDC->LineTo(nHWidth + P2.x,nHHeight - P2.y);
  pDC->LineTo(nHWidth + P0.x,nHHeight - P0.y);

通过比较可知,第一种更方便。

相关文章
C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容
C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容
|
数据库
ArcGIS创建矢量要素并绘制其空间范围的方法
本文介绍在ArcGIS下属ArcMap软件中,新建点、线、面等矢量要素图层,并对新建图层的空间范围加以划定的方法~
749 1
ArcGIS创建矢量要素并绘制其空间范围的方法
|
JSON 前端开发 数据可视化
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
199 0
【图形基础篇】02 # 指令式绘图系统:如何用Canvas绘制层次关系图?
|
前端开发
Delphi绘图功能[2] —— 窗体的绘图属性、圆弧类图形、获取Canvas对象(ClientRect解析)
Delphi绘图功能[2] —— 窗体的绘图属性、圆弧类图形、获取Canvas对象(ClientRect解析)
541 0
Delphi绘图功能[2] —— 窗体的绘图属性、圆弧类图形、获取Canvas对象(ClientRect解析)
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
案例分享:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
|
计算机视觉
Qt实用技巧:图形视图框架中图元将矩形边界改为不规则边界(用于选取和碰撞)
Qt实用技巧:图形视图框架中图元将矩形边界改为不规则边界(用于选取和碰撞)
Qt实用技巧:图形视图框架中图元将矩形边界改为不规则边界(用于选取和碰撞)
|
存储
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
244 0
了解OpenGL中的投影方式、存储着色器分类、常见图元连接方式
【MATLAB】基本绘图 ( 图形属性 | 绘图对象 | 图形属性界面 | 坐标轴属性 | 线属性 | 文本属性 | 图形属性设置策略 )(二)
【MATLAB】基本绘图 ( 图形属性 | 绘图对象 | 图形属性界面 | 坐标轴属性 | 线属性 | 文本属性 | 图形属性设置策略 )(二)
318 0
【MATLAB】基本绘图 ( 图形属性 | 绘图对象 | 图形属性界面 | 坐标轴属性 | 线属性 | 文本属性 | 图形属性设置策略 )(二)
【MATLAB】基本绘图 ( 图形属性 | 绘图对象 | 图形属性界面 | 坐标轴属性 | 线属性 | 文本属性 | 图形属性设置策略 )(一)
【MATLAB】基本绘图 ( 图形属性 | 绘图对象 | 图形属性界面 | 坐标轴属性 | 线属性 | 文本属性 | 图形属性设置策略 )(一)
189 0
【MATLAB】基本绘图 ( 图形属性 | 绘图对象 | 图形属性界面 | 坐标轴属性 | 线属性 | 文本属性 | 图形属性设置策略 )(一)
VTK 曲面构建+颜色映射
Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。 VTK编程中主要用到的几个对象 vtkRenderer ,vtkRenderWindow,vtkActor,vtkMapper,其渲染场景如下图所示(图片来自东灵工作室博客) 在VTK的封装类中有一个专门为用三维杂序点进行重建曲面的类:vtkSur
4510 1
下一篇
DataWorks