当前位置:文档之家› 实验三 绘图操作

实验三 绘图操作

实验三 绘图操作
实验三 绘图操作

课程名称: MATLAB实验

题目:实验三绘图操作

学生姓名:

专业:电子信息工程

班级:

学号:

指导教师:张静

实验地点:现代通信实验室

日期: 2012 年 12月 12 日

实验3 绘图操作

一、实验目的

1、掌握绘制二维图形的常用函数。

2、掌握绘制三维图形的常用函数。

3、掌握绘制图形的辅助操作。

4、掌握图形对象属性的基本操作。

5、掌握利用图形对象进行绘图操作的方法。

二、预习要求

(1)复习7章所讲内容;

(2)熟悉MATLAB中的绘图命令。

三、实验内容

1、已知2

=,2cos(2)

1y x

=,完成下列操作:

y y y

=,31*2

y x

(1)在同一坐标系下用不同的颜色和线型绘制3条曲线。

程序如下:

clear all;

x=0:0.1:2*pi;

y1=x.^2;

y2=cos(2*x);

y3=y1.*y2;

plot(x,y1,'r-',x,y2,'b*',x,y3,'c+')

运行结果:

(2)以子图形式绘制3条曲线。程序:

clear all;

x=(0:0.01:2)*pi;

y1=x.^2;

y2=cos(2*x);

y3=y1.*y2;

h1=subplot(2,2,1);

plot(x,y1)

title('y1=x.^2')

h2=subplot(2,2,2);

plot(x,y2)

title('y2=cos(2*x)');

h3=subplot(2,2,3);

plot(x,y3)

title('y3=y1.*y2');

运行结果:

(3)分别用条形图、阶梯图、杆图和填充图绘制3条曲线。

条形码绘图:

代码:

clear all;

x=0:0.1:10;

y1=x.^2;

y2=cos(2*x);

y3=y1.*y2;

bar(x,y1)

title('y1=x.^2');

bar(x,y2)

title('y2=cos(2*x)');

bar(x,y3)

title('y3=y1.*y2');

运行结果:

阶梯图绘图:

代码:clear all; x=0:0.1:10;

y1=x.^2;

y2=cos(2*x);

y3=y1.*y2;

stairs(x,y1)

title('y1=x.^2'); stairs(x,y2)

title('y2=cos(2*x)'); stairs(x,y3)

title('y3=y1.*y2'); 运行结果:

杆图绘图:

代码:

clear all;

x=0:0.1:10;

y1=x.^2;

y2=cos(2*x);

y3=y1.*y2;

stem(x,y1)

title('y1=x.^2'); stem(x,y2)

title('y2=cos(2*x)'); stem(x,y3)

title('y3=y1.*y2'); 运行结果:

填充图绘图:

代码:clear all;

x=0:0.1:10;

y1=x.^2;

y2=cos(2*x);

y3=y1.*y2;

fill(x,y1,’c’)

title('y1=x.^2');

fill(x,y2,’r’)

title('y2=cos(2*x)');

fill(x,y3,’b’)

title('y3=y1.*y2'); 运行结果:

2、绘制极坐标曲线sin()a b n ρθ=+,并分析参数a ,b ,n 对曲线形状的影响。 程序及运行结果如下:

(1)改变a 的大小,b ,n 保持不变: 代码: clear all; x=0:0.01:2*pi; y1=2*sin(2*x+1); y2=8*sin(2*x+1); h1=subplot(1,2,1); polar(x,y1,'k') title('y1=2*sin(2*x+1)') h2=subplot(1,2,2); polar(x,y2,'b') title('y2=8*sin(2*x+1)') 运行结果:

(2)改变b的大小,a,n保持不变:代码:

clear all;

x=0:0.01:2*pi;

y1=2*sin(2*x+1);

y2=2*sin(6*x+1);

h1=subplot(1,2,1);

polar(x,y1,'k')

title('y1=2*sin(2*x+1)')

h2=subplot(1,2,2);

polar(x,y2,'r')

title('y2=2*sin(6*x+1)')

运行结果:

(3)改变n的大小,a,b保持不变:代码:

clear all;

x=0:0.01:2*pi;

y1=2*sin(2*x+1);

y2=2*sin(2*x+6);

h1=subplot(1,2,1);

polar(x,y1,'k')

title('y1=2*sin(2*x+1)')

h2=subplot(1,2,2);

polar(x,y2,'c')

title('y2=2*sin(2*x+6)')

运行结果:

3、分别用plot函数和fplot函数绘制函数

1

sin

y

x

的曲线,并分析两曲线的差别。

代码:x=0:0.01:10;

y=sin(1./x);

plot(x,y)

fplot('sin(1./x)',[0 10]) 运行结果:

4、绘制函数的曲面图和等高线。 (1)222

(2)x y xy

z x x e

---=-; (2)2

2

2

2

11(,)(1)(1)f x y x y

x y

=

-

-+++

提示:绘制三维曲面图,首先要选定一平面区域并在该区域产生网格坐标矩阵。在做本提前,先分析并上机验证下列命令的执行结果,从中体会产生网络坐标矩阵的方法。(plot3函数、contour3函数)[x,y]=meshgrid(-1:0.5:2,1:5) (1)代码: x=-5:5; y=x;

[x,y]=meshgrid(x,y);

z=(x.^2-2*x)*exp(-x.^2-y.^2-x*y); subplot(2,1,1) surf(x,y,z); title('曲面图')

xlabel('x'),ylabel('y'),zlabel('z'); subplot(2,1,2) contour3(x,y,z); title('等高线图')

xlabel('x'),ylabel('y'),zlabel('z');

运行结果:

(2)代码:

x=-5:5;

y=x;

[x,y]=meshgrid(x,y);

z=1./((x-1).^2+y.^2).^0.5-1./((x+1).^2+y.^2).^0.5; subplot(2,1,1)

surf(x,y,z);

title('曲面图')

xlabel('x'),ylabel('y'),zlabel('z');

subplot(2,1,2)

contour3(x,y,z);

title('等高线图')

xlabel('x'),ylabel('y'),zlabel('z');

运行结果:

5、设23sin 0.5cos 1x y x x ?

?=+??+??

,在02x π= 区间取101点,绘制函数的曲线。 代码:

x=(0:2*pi/100:2*pi);

y=(0.5+3*sin(x)/(1+x.^2))*cos(x); plot(x,y)

gtext(' y=(0.5+3*sin(x)/(1+x.^2))*cos(x)') grid on 运行结果:

6、已知2201ln(1)02

x x

x e y x x x ?+≤??=??++>??在55x -≤≤区间绘制函数曲线。

代码: x=-5:0.1:5;

y=(x+sqrt(pi))/exp(2).*(x>=-5&x<=0)+(1/2)*log(x+sqrt(1+x.^2)).*(x>0&x<=5); plot(x,y)

gtext('y1=(x+sqrt(pi))/exp(2)') gtext('y2=(1/2)*log(x+sqrt(1+x.^2))') 运行结果:

7、绘制函数的曲线图和等高线。

22

4

cos cos

x y

z x ye

+

-

=其中x的21个值均匀分布

[-5,5]范围,y的31个值均匀分布在[0,10],要求使用subplot(2,1,1)和subplot(2,1,2)将产生的曲面图和等高线图画在同一个窗口上。提示:surf函数、surfc函数。

代码:

x=linspace(-5,5,21);

y=linspace(0,10,31);

[x,y]=meshgrid(x,y);

z=cos(x).*cos(y).*exp(-0.25.*(x.^2+y.^2).^0.5);

subplot(2,1,1)

surf(x,y,z);

title('曲面图')

xlabel('x'),ylabel('y'),zlabel('z');

subplot(2,1,2)

contour3(x,y,z);

mfc绘图程序上机步骤

首先生成MFC程序空框架 空框架中的每个类的职责是什么要自己理解清楚 第一次课: 1.定义自己的数据类CLine直线类,用于绘图 点击菜单:插入—类 选择Generic class,输入类名,每个类都是分成两个文件.h 中只有类体,包含类的数据成员定义和成员函数声明,.cpp中就是成员函数的类体外实现 classCLine { int x1,y1,x2,y2; public: CLine(int a=0,int b=0,int c=0,int d=0); virtual ~CLine(); int Getx1(); int Gety1(); int Getx2(); int Gety2(); void SetPoint1(intx,int y);很多函数是在后面使用中发现问题逐渐添加的 void SetPoint2(intx,int y); }; 2.自定义的类要作为数据成员出现在Doc类中 classCSmallCADDoc : public CDocument { protected: // create from serialization only CSmallCADDoc(); DECLARE_DYNCREATE(CSmallCADDoc) // Attributes public: CLine line1; //数据成员应该是私有,但是由于文档类与视图类交换频繁,为了访问方便,直接定义成公有了。你也可以定义成私有,再定义一个Get函数间接访问,取他的值3.注意:添加了这个数据成员后,需要增加几个#include “Line.h”语句 添加的原则是,每个cpp文件都单独编译,哪里用到新的类,相应的cpp前就要增加#include “。。。”语句 此处是在CSmallCADDoc类中添加了一个CLine line1;类对象,在SmallCADDoc.h文件中。所以,凡是包含了#include “SmallCADDoc.h”的地方都要在前面添加#include “Line.h” 语句。共3处:app doc view 这3个类的cpp文件前 4.注意:初始化 CLine line1; //数据成员是文档类的,它不像dos下程序,明确能看到定义,调用构造

mfc简单绘图程序

M F C 简 单 的 绘 图 程 序 ——王帅

目录 摘要 (2) 关键字 (2) 1 引言 (2) 设计目的 ............................................................................................................ 错误!未定义书签。 2 功能说明 (2) 2.1菜单栏....................................................................................................... 错误!未定义书签。 2.1.1图形 (3) 2.1.2画笔 (4) 2.1.3画硬币 (4) 2.2工具栏 (5) 2.3状态栏 (5) 3 功能的实现 (5) 3.1 视图设计 (5) 3.2 编辑资源 (6) 3.3 编程思路及各个函数的实现 (7) (1)思路 (7) (2)代码的实现 (7)

1.为基本形状创建一个基类 (8) 2.基本形状类的创建 (8) 2.1矩形类的创建及定义 (8) 2.2圆形类的创建及定义 (10) 2.3正五边形类的创建及定义 (11) 2.4正三角形类的创建及定义 (14) 2.5椭圆类的创建及定义 (16) 2.6正四边形类的创建及的定义 (17) 2.7正六边形类的创建及定义 (18) 2.8直线类的创建及定义 (19) 3.各基本形状类在CMyDraw2_0类中的调用和绘图的实现 (20) 3.1矩形类的调用与与绘图的实现 (20) 3.2圆形类的调用 (24) 3.3正三角形类的调用 (25) 3.4基本类型调用的剩余代码 (26) 4.画笔的使用、颜色及大小的调整 (29) 5.画硬币 (35) 6.工具栏中的自定义控件 (38) 7.状态栏中的显示 (39) 4程序功能的测试 (41) 5最后总结 (42)

C++实验报告(MFC简单画图程序)

VC++程序设计实验报告 一、实验目的 掌握MFC编程 二、实验内容 用MFC向导创建单文档应用程序,一个简单的画图程序。 ?使用C++语言实现 ?使用VC++6.0集成开发环境开发 ?使用MFC应用程序开发框架 三、实验步骤 ?基本功能描述 1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、 曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2. 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决 定图形的大小,当鼠标弹起,此图形则绘制完毕。 ?设计思路 1. 对需要用到的变量进行初始化。 2. 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 3. 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4. 选择图形或其它属性,可进行下一次绘制。 ?软件设计 A 设计步骤 1.创建单文档 创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。创建成功后,系统自动生成相应的类,如图3所示。

图1 创建工程 图2 创建单文档

mfc简单绘图程序报告

简单绘图程序 1 需求说明 1.1 问题描述 设计一个简单的绘图应用程序,可以绘制图形或自由绘制线段,可以更改颜色、画笔粗细、保存文件。 1.2功能说明 1.图形绘制功能:直线、椭圆、矩形。 在菜单栏中选择需要的图形(也可以通过工具栏中选择)用鼠标便能在视图中绘出相应的图形。 2.可以绘制自由线段 3.对图形的操作:能通过菜单栏弹出对话框选择线宽、自定义颜色,也可以擦除绘制的线段。 4.可以保存绘图文件,保存后打开可以继续绘制。 2.1.3 数据说明 在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。在CDzyView类中添加一个私有变量xz;用来保存用户的选择(直线、矩形、椭圆、自由绘图)在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标停止移动时得到另外一个点。为视图类CDzyView分别捕获鼠标左键按下和弹起这两个消息。当鼠标左键按下时,需要将鼠标当前按下点保存至sx、sy,在鼠标移动停止后,将当前坐标保存至ex,ey.

其他主要数据说明: int fd 判断是否为自由绘图模式int w 线宽 int R RGB中的R int G RGB中的G int B RGB中的B CGraph类中 int m_nType:保存后重绘时用户的选择int qdx; 重绘起点x int qdy; 重绘起点y int zdx; 重绘终点x int zdy; 重绘终点y CLine类中 int cx; 重绘线宽 int sx; 重绘起点x int sy; 重绘起点y int zx; 重绘终点x int zy; 重绘终点y int w; 重绘线宽 自定义颜色对话框关联变量: IDC_EDIT_RED int m_Red IDC_EDIT_GREEN int m_Green IDC_EDIT_BLUE int m_Blue IDC_SCROLL_RED CScrollBar m_Sred IDC_SLIDER_GREEN CSliderCtrl m_Sgreen IDC_SPIN_BLUE CSpinButtonCtrl m_Sblue 2 分析、设计与实现 2.1 主要功能设计与实现

MFC实现简单画图形程序(学习相关)

《MFC编程及应用》课程设计报告题目:简单画图形程序 学号:姓名: 指导老师: 时间: 评语:

程序设计步骤: 一、建立基于对话框的应用程序框架; 二、CMy0910200155Dlg类中关键新增变量的作用: CPtrArray pta; //用于保存已绘图形的相关信息。 CMemoryNode *pmN; //指向CMemoryNode类的指针,程序运行过 程中动态保存对象信息。 CMemoryNode *pmn; //指向CMemoryNode类的指针,从文件中读 取信息时动态创建类的对象。 COLORREF m_CurrentBrushColor; //用于存放当前画刷的颜色。 COLORREF m_CurrentPenColor; //用于存放当前画笔的颜色。 int num; //用于存放从"Index.txt"文件中读取的数字。 int flag=0; //用于标识:当为1时,表示按下了”画图”按钮;当为2时, 表示按下了”撤消”按钮;当为3时,表示按下了”加载历史” 按钮,则从文件中读取信息。 int mark; //用于标识:当为0时,表示刚画过矩形;当为1时,表示 刚画过圆角矩形;当为2时,表示刚画过椭圆。 int index; //用于存放pta数组的容量。 int flag1=0; //用于标识,和flag搭配,用来处理多种情况下的窗口重绘 问题。 int ButtonState=0; //用于标识,是类CShow和类CMy0910200155Dlg 的一个接口,通过其值在1和0之间转换,来处理弹出式对 话框的初次绘制和移动时的重绘问题。

基于MFC的OpenGL绘图

基于MFC的OpenGL绘图 本文更新版本请点击 [置顶]《基于MFC的OpenGL编程》系列文章 一、简介 GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC")。每一个GDI命令需要传给它一个DC,但与GDI不同,OpenGL使用当前绘制环境(RC)。一旦在一个线程中指定了一个当前RC,在此线程中其后所有的OpenGL命令都使用相同的当前RC。虽然在单一窗口中可以使用多个RC,但在单一线程中只有一个当前RC。下面我将首先产生一个OpenGL RC并使之成为当前RC,这将分为三个步骤:设置窗口像素格式;产生RC;设置为当前RC。 二、MFC中的OpenGL基本框架 1、首先创建工程 用AppWizard产生一个MFC EXE项目,其他默认即可。 2、将此工程所需的OpenGL文件和库加入到工程中 在工程菜单中,选择"Build"下的"Settings"项。单击"Link"标签,选择"General"目录,在Object/Library Modules的编辑框中输入"opengl32.lib glu32.lib glut.lib glaux.lib"(注意,输入双引号中的内容,各个库用空格分开;否则会出现链接错误),选择"OK"结束。然后打开文件"stdafx.h",加入下列头文件: #include #include 3、改写OnPreCreate函数并给视图类添加成员函数和成员变量

OpenGL需要窗口加上WS_CLIPCHILDREN(创建父窗口使用的Windows风格,用于重绘时裁剪子窗口所覆盖的区域)和WS_CLIPSIBLINGS(创建子窗口使用的Windows风格,用于重绘时剪裁其他子窗口所覆盖的区域)风格。把OnPreCreate改写成如下所示:BOOL COpenGLDemoView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS); return CView::PreCreateWindow(cs); } 产生一个RC的第一步是定义窗口的像素格式。像素格式决定窗口着所显示的图形在内存中是如何表示的。由像素格式控制的参数包括:颜色深度、缓冲模式和所支持的绘画接口。在下面将有对这些参数的设置。我们先在COpenGLDemoView的类中添加一个保护型的成员函数BOOL SetWindowPixelFormat(HDC hDC)(用鼠标右键添加)和保护型的成员变量:int m_GLPixelIndex;并编辑其中的代码如下: BOOL COpenGLDemoView::SetWindowPixelFormat(HDC hDC) {//定义窗口的像素格式 PIXELFORMATDESCRIPTOR pixelDesc= { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL| PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI, PFD_TYPE_RGBA, 24, 0,0,0,0,0,0, 0, 0,

基于MFC的简单画图程序实验

简单画图程序 【实验目的】 本实验目的是通过构建基于MFC的windows画图程序,使学生: (1) 理解MFC应用程序的运行机制 (2) 掌握使用MFC构建Windows应用程序的基本结构及编程的基本方法 (3) 理解和掌握MFC应用程序消息处理机制及应用 (4) 掌握类向导(ClassWizard)的使用 【实验要求】 (1) 必须做好实验原理的预习。 (2) 需要对提供的程序代码进行分析,并明确实验时还应在何处添加哪些语句。 【实验环境】 Microsoft Windows XP Microsoft Visual C++ 6.0 1 基本功能描述 1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。 3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。 2 设计思路 1) 对需要用到的变量进行初始化。 2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同

3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4) 选择图形或其它属性,可进行下一次绘制。

c++实验报告mfc简单画图程序).doc

V C++程序设计实验报告 一、实验目的 掌握MFC编程 二、实验内容 用MFC向导创建单文档应用程序,一个简单的画图程序。 ?使用C++语言实现 ?使用VC++6.0集成开发环境开发 ?使用MFC应用程序开发框架 三、实验步骤 ?基本功能描述 1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2. 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形 则绘制完毕。 ?设计思路 1. 对需要用到的变量进行初始化。 2. 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 3. 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4. 选择图形或其它属性,可进行下一次绘制。 ?软件设计 A 设计步骤 1.创建单文档 创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。创建成功后,系统自动生成相应的类,如图3所示。

图1 创建工程 图2 创建单文档

MFC02_Visual Studio C++ MFC简单绘图程序

Visual studio C++ MFC 简单绘图程序-绘制国际象棋棋盘 功能:由Button将绘制的棋盘显示于Picture Control中 一、建立一个MFC功程序: 1.启动Visual Studio C++; 2.新建一个MFC对话框项目:New|Project|MFCAplication; https://www.doczj.com/doc/5715579072.html,中输入mfc_pic,然后点|OK; 4.在Welcome to the MFC Application窗口:点next; 5.在Application Type窗口:点dialoge base;然后点Finish;出现如图所示的窗口; 6.删除窗口中的TODO…文本对象; 二、向窗口添加一个Picture Control和一个Button共二个对象: 1.修改Button的Caption属性为“绘制棋盘”,ID属性为IDC_BUTTON_DRAR; 2.修改Picture Control的ID属性为IDC_PIC,建立关联变量名为picD; 3.双击Button,添加如下代码: voidCmfcpicDlg::OnBnClickedButton1() { CRect r; intw,h,dxy,i,j; CWnd *pic = GetDlgItem(IDC_PIC); //取Picture的长宽信息 GetDlgItem(IDC_PIC)->GetWindowRect(&r); w=r.Width(); h=r.Height(); dxy=(wGetDC(); pdc->Rectangle(r); CBrushmyBrush; pdc->Rectangle(0,0,8*dxy,8*dxy); //绘制外框线 myBrush.CreateSolidBrush(RGB(0,0,0)); for(i=0;i<8;i++){ for(j=i%2;j<8;j+=2){ r.left=i*dxy; r.top=j*dxy; r.right=(i+1)*dxy; r.bottom=(j+1)*dxy;

c++简单画图程序

目录 1. 基本功能描述 (1) 2. 设计思路 (1) 3. 软件设计 (4) 设计步骤 (4) 界面设计 (6) 关键功能的实现 (7) 4. 结论与心得体会 (8) 5. 思考题 (8) 6. 附录 (10) 调试报告 (10) 测试结果 (10) 关键源代码 (10)

简单画图程序 1. 基本功能描述 简单画图程序实现了常见图形的绘制、图形属性的设置和图形数据的暂存等功能。该程序的具体功能模块包括以下几项: 1) 图形绘制模块。该模块实现直线段、椭圆、矩形等图形的绘制功能。在鼠标移动的过程中能实时显示当前绘制的图形。 2) 图形属性设置模块。该模块实现绘图线条的线宽,线色,图形填充色等属性设置功能。 3) 图形数据暂存模块。该模块实现直线段、椭圆、矩形等图形数据暂存功能,涉及图形的坐标、线宽、线色、填充色等数据。 2. 设计思路 1) 对需要用到的变量进行初始化。 2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。 3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。 4) 选择图形或其它属性,可进行下一次绘制。 5) 程序的流程图如下:

图1 程序流程图 3. 软件设计 设计步骤 1) 创建单文档 创建一个MFC AppWizard[exe]工程,命名为“LiYuJing”,如图1所示,并创建单文

解决MFC绘图过程中的闪烁

如何解决绘图过程中的闪烁 在VC中进行绘图过程处理时,如果图形刷新很快, 经常出现图形闪烁的现象。利用先在内存绘制,然后 拷贝到屏幕的办法可以消除屏幕闪烁,具体的方法是先在内存 中创建一个与设备兼容的内存设备上下文,也就是开辟一快内 存区来作为显示区域,然后在这个内存区进行绘制图形。在绘制完成后利用 BitBlt函数把内存的图形直接拷贝到屏幕上即可。 具体的代码实现为: (1)创建内存区域 CDC* pMem=new CDC; CBitmap* pBmp=new CBitmap; CBitmap* pOldBmp; CDC* pDC=GetDC(); CRect rectTemp;为绘图区域 pMem->CreateCompatibleDC(pDC); pBmp->CreateCompatibleBitmap(pDC, rectTemp.Width(), rectTemp.Height()); pOldBmp=pMem->SelectObject(pBmp); (2)进行图形绘制 pMem->LineTo(...); 进行绘图处理 (3)拷贝到屏幕 pDC->BitBlt(rectTemp.left,rectTemp.top,rectTemp.Width(),rectTemp.Height(),pMem,0,0,SRCCO PY); pMem->SelectObject(pOldBmp); pBmp->DeleteObject() ; pMem->DeleteDC(); ====================================================================== ========================== 双缓存机制解决VC++绘图时的闪烁问题 显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。 而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。 MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单, 只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。 我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈 我的一些观点。

MFC单文档应用程序基础训练——文本输出、绘图等要点

MFC单文档 基础训练——文本输出、绘图等 平台为:VS2010

1.一个简单的单文档应用程序 文件->新建项目->MFC应用程序,出现窗口按“下一步”,出现下面窗口选择单文档 点"调试—>运行",最后运行界面为下图:

一个简单的单文档应用程序向导自动建立五个类: 向导自动建立的类相应源文件其他源文件相应头文件其他头文件CAboutDlg StdAfx.cpp StdAfx.h CXxxApp Xxx.cpp Xxx.rc Xxx.h Resource.h CXxxView XxxView.cpp XxxView.h CXxxDoc XxxDoc.cpp XxxDoc.h

CMainFrame MainFrame.cpp MainFrame.h 文档—视结构 每个类的主要函数: void CAboutDlg::DoDataExchange(CDataExchange* pDX) int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)//创建窗体的工具栏,状态栏等 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) BOOL CXxxApp::InitInstance() void CXxxApp::OnAppAbout() BOOL CXxxDoc::OnNewDocument()//初始化文档字符数据、字体信息等 void CXxxDoc::Serialize(CArchive& ar) BOOL CXxxView::PreCreateWindow(CREATESTRUCT& cs) void CXxxView::OnDraw(CDC* pDC) BOOL CXxxView::OnPreparePrinting(CPrintInfo* pInfo)//弹出打印对话框 void CXxxView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo) void CXxxView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo) CXxxDoc* CXxxView::GetDocument() // non-debug version is inline 创建单文档应用程序的一般步骤: ● 利用AppWizard 创建应用程序框架 ● 在文档内中声明保存文档数据所需要数据对象 ● 完成文档类的OnNewDocument 函数,初始化新文档 ● 完成文档类的Serialize 函数,保持和加载文档数据 ● 完成视类的OnInitialUpdate 函数,初始化显示 ● 完成视类的OnDraw 函数,显示当前文档内容 ● 在视类中加入可以使用户编辑文档数据所需的代码 视(View ) 显示用户程序的数据及处理用户与文档的交互 文档对象 永久存储 (磁盘文件) MainFrame 框架窗口

MFC绘图教程大全

本文由hoplee_2010贡献 ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 MFC MFC绘图 MFC编程学习的基本目标编程学习的基本目标 可以进行简单的基于MFC的图形界面编程的图形界面编程可以进行简单的基于 理解Windows编程的基本概念。编程的基本概念。理解编程的基本概念鉴于教学时间进度限制,鉴于教学时间进度限制,更复杂的应用程序开发通过自学完成。自学完成。 实现基本MFC应用程序需要掌握如下内容:应用程序需要掌握如下内容:实现基本应用程序需要掌握如下内容 Windows编程基本概念编程基本概念文档/视图结构文档视图结构文档读写对话框及标准控件的使用菜单栏的使用绘图及鼠标消息的处理 3/21/20112 主要内容 GDI与设备环境(DC)与设备环境()与设备环境用CDC绘图绘图应用举例绘图工具类 3/21/2011 3 图形设备接口(图形设备接口(GDI)) Windows提供了一个称为图形设备接口提供了一个称为图形设备接口(Graphics Device Interface,GDI)的抽象接口。的抽象接口。,的抽象接口GDI作为作为Windows 的重要组成部分,负责管理用的重要组成部分,的重要组成部分户绘图操作时功能的转换。户绘图操作时功能的转换。用户通过调用GDI函数与设备打交道,GDI通过函数与设备打交道,用户通过调用不同设备提供的驱动程序将绘图语句转换为对应的绘图指令,避免了用户对硬件直接进行操作,的绘图指令,避免了用户对硬件直接进行操作,从而实现设备无关性(显示器或打印机)。从而实现设备无关性(显示器或打印机)。 3/21/2011 4 GDI的图形输出的图形输出 应用程序可以使用GDI创建如下图形输出应用程序可以使用 矢量图形:画线和填充图形,包括点、直线、曲线、多矢量图形:画线和填充图形,包括点、直线、曲线、边形、扇形和矩形等。边形、扇形和矩形等。光栅图形:光栅图形:通过光栅图形函数对以位图形式存储的数据进行操作,包括各种位图和图标的输出。进行操作,包括各种位图和图标的输出。 屏幕:对若干行和列的像素操作屏幕:打印机:打印机:对若干行和列的点阵输出直接从内存到显存的复制操作,速度快,内存要求高。直接从内存到显存的复制操作,速度快,内存要求高。 文本:以图形方式输出文本,文本:以图形方式输出文本,以逻辑坐标为单位计算输出位置,是以行为单位。出位置,而DOS是以行为单位。用户可以设置文本的各是以行为单位种效果,如加粗、斜体、设置颜色等。种效果,如加粗、斜体、设置颜色等。 3/21/2011 5 设备环境

简易绘图程序 使用API和MFC

XXX大学 程序设计实践报告 课题名称:程序设计实践 学生姓名:XXXXXxxxxx 班级:2012XXXXX 班内序号:XXX 学号:XXxx21XXX 日期:2014年5月 1.课题概述 1.1课题目标和主要内容 本课题了实现一个基于API和MFC的简易绘图软件。此简易绘图软件,满足用户进

行绘图时的基本需求,主要功能包括绘制会动的时钟,绘制三角形(API实现),绘制线条(MFC实现)。应具有良好的界面、必要的交互信息和简易的菜单进行操作。在程序的设计与实现中,系统开发平台为Windows7,主要工具为Visual Studio 2012。 1.2系统的主要功能 主要功能与说明: DROW1(API): 1)会动的时钟的绘制: 模拟一个真实的表盘,绘制图形,显示实际的时间。 2)绘制简单的三角形; MFC: 1)图形的绘制: a)线形绘图函数: Lineto:绘制直线 Polyline:绘制折线 Arc:绘制圆弧线 Polybezir:绘制弯曲线 b)区域绘图函数 Rectant:绘制矩形 Roundrect:绘制圆边矩形 Ellips:绘制椭圆 Pie:绘制扇形 2)自由绘图:拖动鼠标可以自由绘制曲线,可以通过一个对话框选择所需线形线 宽等。 3)清空功能: 1)全部清空:可以清空整个屏幕内容。 2. 系统设计

2.1 系统总体框架 API: MFC: 2.2 系统详细设计 2.2.1 模块划分图及描述

a) 绘图函数模块:通过各种系统自带的绘图函数,直接调用绘图。设置他们的位置,并添加到菜单项,使点击菜单项则可出现相应图形。 Lineto:绘制直线 Polyline:绘制折线 Arc:绘制圆弧线 Polybezir:绘制弯曲线 Rectant:绘制矩形 Roundrect:绘制圆边矩形 Ellips:绘制椭圆 Pie :绘制扇形 b) 自由绘图模块:按下鼠标左键,初始化起始位置,在选定自由绘图模式的情况下,拖动鼠标的同时,获取鼠标当前位置为终点位置,调用MoveTo 和LineTo 函数连接两点。连线完成后,将上一条直线的终点作为下一次连线的起始位置。反复进行该操作,直到鼠标左键不再处于按下状态。当连线的频率足够快时,所画出的图形能近似于曲线,就能实现自由绘图。 更改画笔线宽、线形:设置一个对话框,分别定义两个成员变量储存用户选择的现款和线形,再用一个整形变量,在每次绘图前,声明一个CPen 类型的画笔对象,并用储存的颜色和线宽对该对象进行初始化,随后把该画笔选入设备描述表中。 c) 窗口图形模块:通过在资源视图中设置菜单栏,将菜单栏设置成绘图函数、设置、清空(等板块;并默认为自由线画图,分别定关联函数和变量来记录做出的选择。 2.2.2 类关系图及描述

C++ MFC 如何绘制线 画笔

mfc笔记画线 步骤一: 在CMFC0420View中添加三个变量: CPoint m_ptOrigin;//起始点坐标 bool m_bDragging; // 拖拽标记 HCURSOR m_hCross;// 光标句柄 步骤二: 在CMFC0420View构造函数中初始化变量 CMFC0420View::CMFC0420View() { // TODO: 在此处添加构造代码 m_hCross = AfxGetApp()->LoadStandardCursor(IDC_CROSS);//获取十字光标句柄m_bDragging = false;//初始化拖拽标记 } 步骤三: 在CMFC0420View类向导中添加消息OnLButtonDown,并进行设置 (这个函数添加了以后就是CMFC0420View的成员函数了) void CMFC0420View::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 SetCapture(); //捕捉鼠标 ::SetCursor(m_hCross); //设置十字光标 m_ptOrigin =point; m_bDragging = TRUE; //设置拖拽标记 //CView::OnLButtonDown(nFlags, point); } 步骤四: 在CMFC0420View类向导中添加消息OnMouseMove,并进行设置 void CMFC0420View::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (m_bDragging) { CClientDC dc(this); dc.MoveTo(m_ptOrigin); dc.LineTo(point); //绘制线段

mfc简单绘图程序设计报告

网络工程091班 路林生 2010年12月30日

一、简单的绘图应用程序 1.1.设计内容 能够利用所学的基本知识,设计一个简单的绘图应用程序,具有以下功能:①具备基本的图形绘制功能:直线、圆、矩形;(必须实现的功能)②编辑功能包括:具有橡皮拉线功能,允许鼠标拖放,能双击选中图形元素,能删除和剪切图形元素,能撤消最近的修改等;(这部分功能选做)③数据保存功能:能够把图形数据保存到文件中必须实现的功能)。 1.2.设计目的 ①了解Windows编程的基础知识,掌握MFC应用程序的基本知识; ②基本掌握面向对象程序设计的基本思路和方法; ③掌握用VC++开发应用程序的的一般步骤和方法; 1.3.设计要求 ①用VC++进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释; 2.详细设计与实现 2.1. 基本思路 单文档,添加三个菜单项,直线、矩形、圆、添加一个变量区分点击相关菜单项,添加三个变量,一个记录起点,一个记录终点,一个记录类型。创建序列化类,保存图形信息。 2.2. 设计步骤及主要代码 //主要函数代码 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnCancelMode(); afx_msg void OnDrawrectangle(); afx_msg void OnDrawround(); afx_msg void OnDrawline(); //保存起点 void CTestdrawView::OnLButtonDown(UINT nFlags, CPoint point) { m_ptOrigin=point; CView::OnLButtonDown(nFlags, point); } //绘图 void CTestdrawView::OnLButtonUp(UINT nFlags, CPoint point)

相关主题
文本预览
相关文档 最新文档