VC实验二MFC曲线绘制实验.docx

上传人:b****3 文档编号:3813543 上传时间:2023-05-06 格式:DOCX 页数:18 大小:537.49KB
下载 相关 举报
VC实验二MFC曲线绘制实验.docx_第1页
第1页 / 共18页
VC实验二MFC曲线绘制实验.docx_第2页
第2页 / 共18页
VC实验二MFC曲线绘制实验.docx_第3页
第3页 / 共18页
VC实验二MFC曲线绘制实验.docx_第4页
第4页 / 共18页
VC实验二MFC曲线绘制实验.docx_第5页
第5页 / 共18页
VC实验二MFC曲线绘制实验.docx_第6页
第6页 / 共18页
VC实验二MFC曲线绘制实验.docx_第7页
第7页 / 共18页
VC实验二MFC曲线绘制实验.docx_第8页
第8页 / 共18页
VC实验二MFC曲线绘制实验.docx_第9页
第9页 / 共18页
VC实验二MFC曲线绘制实验.docx_第10页
第10页 / 共18页
VC实验二MFC曲线绘制实验.docx_第11页
第11页 / 共18页
VC实验二MFC曲线绘制实验.docx_第12页
第12页 / 共18页
VC实验二MFC曲线绘制实验.docx_第13页
第13页 / 共18页
VC实验二MFC曲线绘制实验.docx_第14页
第14页 / 共18页
VC实验二MFC曲线绘制实验.docx_第15页
第15页 / 共18页
VC实验二MFC曲线绘制实验.docx_第16页
第16页 / 共18页
VC实验二MFC曲线绘制实验.docx_第17页
第17页 / 共18页
VC实验二MFC曲线绘制实验.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VC实验二MFC曲线绘制实验.docx

《VC实验二MFC曲线绘制实验.docx》由会员分享,可在线阅读,更多相关《VC实验二MFC曲线绘制实验.docx(18页珍藏版)》请在冰点文库上搜索。

VC实验二MFC曲线绘制实验.docx

VC实验二MFC曲线绘制实验

实验二、MFC曲线绘制实验

班级:

姓名:

学号:

2.1实验目的

●了解Windows图形处理的基本原理。

●掌握Windows图形和文本输出。

2.2实验平台

●WindowsXPprofessional操作系统。

●VC6.0集成开发环境。

2.3实验内容

●MFC曲线绘制实现

2.4实验原理

●图形设备接口和接口环境

Windows是一个图形操作系统,Windows使用图形设备接口(GDI)进行图

形和文本输出,MFC封装了GDI对象,提供了CGdiObject类和CDC类支持图形和文本输出。

Windows引入GDI的主要目的是为了实现设备无关性。

所谓设备无关性,是指操作系统屏蔽了硬件设备的差异,使用户编程时一般无须考虑设备的类型。

应用程序可以使用GDI创建3种类型的图像:

1.适量图形:

如各种集合图形。

2.光栅图形:

指光栅图形函数对以位图形式存储的数据进行操作,它包括各种位图和图标的输出。

3.文本:

以逻辑坐标为单位进行计算,Windows中的文本是按图形方式输出的。

1.设备环境(DeviceContext,DC)

为了体现Windows的设备无关性,应用程序的输出不直接面向显示器或打印机等物理设备,而是面向一个称之为设备环境(DeviceContext,DC)的虚拟逻辑设备。

设备环境,DC也称设备描述表或设备上下文。

设备环境DC是由GDI创建、用来代表设备连接的数据结构。

DC的主要功能有以下几种:

(1)允许应用程序使用一个输出设备。

(2)提供Windows应用程序、设备驱动和输出设备之间的连接。

(3)保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。

(4)保存窗口剪切区域(ClippingRegion),限制程序输出到输出设备中窗口覆盖的区域。

2.设备环境类CDC及其功能

设备环境类

功能描述

CDC

所有设备环境类的基类,对GDI的所有绘图函数进行了封装;可用来直接访问整个显示器或非显示设备(如打印机等)的上下文。

CPaintDC

CPaintDC用于响应窗口重绘消息(WM_PAINT)的绘图输出,不仅可对客户区进行操作,还可以对非客户区进行操作。

CClientDC

代表窗口客户区的设备环境,一般在响应非窗口消息并对客户区绘图时要用到该类。

CWindowDC

代表整个窗口的设备环境,包括客户区和非客户区;除非要自己绘制窗口边框和按钮,否则一般不用它。

CMetaFileDC

代表Windows图元文件的设备环境;一个Windows图元文件包括一系列的图形设备接口命令,可以通过重放这些命令来创建图形;对CMetaFileDC对象进行的各种绘制操作可以被记录到一个图元文件中。

3.设备环境类CDC的一些常用函数

4.颜色的设置

Windows用COLORREF类型的数据存放颜色,它实际上是一个32位整数。

任何一种颜色都是由红、绿、蓝3种基本颜色组成的,COLORREF类型数据的低位字节存放红色强度值,第2个字节存放绿色强度值,第3个字节存放蓝色强度值,高位字节为0,每一种颜色分量的取值范围为0~255。

直接设置COLORREF类型的数据不太方便。

MFC提供了RGB宏,用于设置颜色,它将其中的红、绿、蓝分量值转换为COLORREF类型的颜色数据,其使用形式为:

RGB(byRed,byGreen,byBlue)

其中参数byRed、byGreen和byBlue分别表示红、绿、蓝分量值(范围0~255)。

例如,

RGB(0,0,0)表示黑色,RGB(255,0,0)表示红色,RGB(0,255,0)表示绿色,RGB(0,0,255)表示

蓝色。

表3-3列出了一些常用颜色的RGB值。

很多涉及到颜色的GDI函数都需要使用COLORREF类型的参数,如设置背景色的成员函数CDC:

:

SetBkColor()、设置文本颜色的成员函数CDC:

:

SetTextColor()。

下面的代码说明如何使用RGB宏。

COLORREFrgbBkClr=RGB(192,192,192);//定义灰色

pDC->SetBkColor(rgbBkClr);//背景色为灰色

pDC->SetTextColor(RGB(0,0,255));//文本颜色为蓝色

5.获取设备环境

在一个MFC应用程序中获得DC的方法主要有两种:

一是接受一个参数为指向CDC对象的指针;二是声明一个MFC设备环境类的对象,并使用this指针为该对象赋值。

6.GDI对象CGdiObject

在默认状态下,当用户创建一个设备环境并在其中绘图时,系统使用设备环境默认的绘图工具及其属性。

如果要使用不同风格和颜色的绘图工具进行绘图,用户必须重新为设备环境设置自定义的画笔和画刷等绘图工具。

这些绘图工具统称为GDI对象。

GDI对象是Windows图形设备接口的抽象绘图工具。

除了画笔和画刷,其他GDI对象还包括字体、位图和调色板。

MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类。

 

1.CPen类:

装GDI画笔。

用于绘制对象的边框以及直线和曲线。

默认的画笔用于绘制与一个像素等宽的黑色实线。

2.CBrush类:

装GDI画刷。

画刷是用来填充一个封闭图形对象(如矩形、圆形)的内部区域的,默认的画刷颜色是白色。

3.CFont类:

封装GDI字体对象。

用来绘制文本。

用户可以建立一种GDI字体,并使用CFont的成员函数来访问它。

主要用于设置文本输出的效果,包括文字的大小、是否加粗、是否斜体、是否加下划线等。

4.CBitmap类:

封装GDI位图。

提供成员函数装载和位图操作,位图可以用于填充区域。

5.CPalette类:

封装GDI调色板。

包含系统可用的色彩信息,是应用程序和彩色输出设备环境(如显示器)的接口。

6.CRgn类:

封装GDI区域。

区域是窗口内的一块多边形或椭圆形区域。

CRgn用于设备环境(通常是窗口)内的区域操作,通常和CDC类中与裁剪(clipping)有关的成员函数配合使用。

●画笔和画刷的使用

库存对象是由操作系统维护的、用于绘制屏幕的常用对象,包括库存画笔、画刷、字

体等。

使用SelectStockObject()函数可以直接选择库存对象,修改系统默认值。

如果选择

成功,函数SelectStockObject()将返回以前的CGdiObject对象的指针,需要将返回值转换

为相匹配的GDI对象的指针。

函数参数用于指定选择的是哪一种GDI库存对象,可直接

选用的库存对象见表:

2.5实验步骤

Ø创建MFC应用程序框架

打开VC6.0,使用MFCAppWizard[exe]向导创建MFC应用程序Sy5框架,选择单文档应用程序,其它默认。

Ø添加菜单项

选择项目工作区的资源视图,展开menu文件夹,双击菜单资源IDR_MAINFRAME,打开菜单编辑器。

在主菜单【帮助】的后面添加3个菜单项【曲线】、【线宽】和【颜色】,并分别给它们添加子菜单,如下图所示

Ø创建快捷菜单

为应用程序添加一个快捷菜单,并将快捷菜单的菜单项设置为菜单栏中的相应项,如下图所示:

Ø创建工具栏

为应用程序创建一个新的工具栏,并使工具栏上的各按钮与菜单栏中的菜单项相对应,如下图所示:

Ø添加代码

⏹添加成员变量及成员函数

选择项目工作区中的类视图,右击CSy5View,光标移至添加,分别添加成员变量及成员函数,见以下两个表:

在构造函数中初始化成员变量:

CSy5View:

:

CSy5View()

{

m_typ=0;//初始时窗口中不显示曲线

m_col=RGB(0,0,0);//颜色初始为黑色

m_wid=1;//线宽初始为1

m_able=0;//初始时除“正弦”和“余弦”菜单项外,新增的其他菜单项均//为不可用

}

⏹添加成员函数代码

打开Sy5View.h文件,在类的定义前面添加代码:

constdoublePI=3.1416;

打开Sy5View.cpp文件,添加如下文件包含代码:

#include"math.h"

#include"MainFrm.h"

为上表中各成员函数添加代码:

doubleCSy5View:

:

calsin(intx)

{

doubley;

y=sin(x*PI/180);//计算正弦

returny;

}

doubleCSy5View:

:

calcos(intx)

{

doubley;

y=cos(x*PI/180);//计算余弦

returny;

}

voidCSy5View:

:

drawline(CDC*pDC,intx1,inty1,intx2,inty2)

{

pDC->MoveTo(x1,y1);

pDC->LineTo(x2,y2);

}

voidCSy5View:

:

drawaxis(CDC*pDC)

{

CStringstr;

CFontmyfont,*oldfont;

myfont.CreatePointFont(80,"Arial",pDC);//定义坐标刻度字体

oldfont=pDC->SelectObject(&myfont);

drawline(pDC,50,10,50,290);//绘制Y轴

drawline(pDC,45,150,780,150);//绘制X轴

for(inti=50;i<780;i=i+90)

{

drawline(pDC,i,145,i,150);//绘制X轴上刻度线

str.Format("%d",i-50);

if((i-50)!

=0)pDC->TextOut(i,155,str);//输出X轴上刻度值

}

for(i=0;i<11;i++)//绘制Y轴上刻度线,输出刻度值

{

drawline(pDC,50,50+20*i,55,50+20*i);

str.Format("%.2f",1-0.2*i);

if(i!

=5)pDC->TextOut(15,45+20*i,str);

elsepDC->TextOut(15,45+20*i,"0");

}

pDC->SelectObject(oldfont);

myfont.DeleteObject();

}

voidCSy5View:

:

drawcurve(CDC*pDC)

{

drawaxis(pDC);//调用成员函数绘制坐标系

CPointpoint[750];

CPenmypen,*oldpen;

mypen.CreatePen(PS_SOLID,m_wid,m_col);//创建实线画笔、线宽及颜//色由参数m_wid和m_col确定

oldpen=pDC->SelectObject(&mypen);

for(inti=0;i<722;i++)

{

point[i].x=i+50;

if(m_typ==1)//根据参数m_typ的值确定曲线类型

point[i].y=(int)(150-calsin(i)*100);

elseif(m_typ==2)

point[i].y=(int)(150-calcos(i)*100);

}

for(i=0;i<721;i++)

drawline(pDC,point[i].x,point[i].y,point[i+1].x,point[i+1].y);

//调用函数绘制曲线

pDC->SelectObject(oldpen);

mypen.DeleteObject();

}

⏹建立消息映射

分别为菜单项【正弦】、【余弦】、【线宽2】、【线宽3】、【红色】和【蓝色】添加COMMAND及UPDATE_COMMAND_UI消息处理函数,见下表:

 

在消息处理函数中添加如下代码:

voidCSy5View:

:

OnSin()

{

m_typ=1;//选择正弦曲线

m_able=1;//不可用菜单项变为可用

Invalidate();//更新视窗

}

voidCSy5View:

:

OnCos()

{

m_typ=2;

m_able=1;

Invalidate();

}

voidCSy5View:

:

OnColr()

{

m_col=RGB(255,0,0);//选择红色

Invalidate();

}

voidCSy5View:

:

OnColb()

{

m_col=RGB(0,0,255);

Invalidate();

}

voidCSy5View:

:

OnWidsp2()

{

m_wid=2;//设置线宽为2

Invalidate();

}

voidCSy5View:

:

OnWidsp3()

{

m_wid=3;

Invalidate();

}

voidCSy5View:

:

OnUpdateColb(CCmdUI*pCmdUI)

{

pCmdUI->Enable(m_able);//“红色”菜单项变为可用

if(m_col==RGB(0,0,255))

pCmdUI->SetCheck(true);//“红色”菜单项加标记

else

pCmdUI->SetCheck(false);

}

voidCSy5View:

:

OnUpdateColr(CCmdUI*pCmdUI)

{

pCmdUI->Enable(m_able);

if(m_col==RGB(255,0,0))

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

voidCSy5View:

:

OnUpdateWidsp2(CCmdUI*pCmdUI)

{

pCmdUI->Enable(m_able);

if(m_wid==2)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

voidCSy5View:

:

OnUpdateWidsp3(CCmdUI*pCmdUI)

{

pCmdUI->Enable(m_able);

if(m_wid==3)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(false);

}

⏹添加状态栏操作代码

打开MainFrm.cpp文件,将系统默认的状态栏对象m_wndStatusBar的访问类型改为Public。

在状态栏静态数组中添加ID_INDICATOR_PROMPT,并在字符串编辑器中设置其属性,手工建立ID_INDICATOR_PROMPT的UPDATE_COMMAND_UI消息映射。

首先,选择项目工作区的ClassView视图,双击CSy5View类,打开其头文件Sy5View.h,在消息处理函数的声明宏中添加代码。

afx_msgvoidOnUpdatePrompt(CCmdUI*pCmdUI);

然后,打开Sy5View.cpp文件,在其消息映射表中添加代码。

ON_UPDATE_COMMAND_UI(ID_INDICATOR_PROMPT,OnUpdatePrompt);

最后,在Sy5View.cpp文件中给消息处理函数OnUpdatePrompt()添加代码。

voidCSy5View:

:

OnUpdatePrompt(CCmdUI*pCmdUI)

{

CMainFrame*pMainFrame=(CMainFrame*)AfxGetMainWnd();

CStatusBar*pStatusBar=&pMainFrame->m_wndStatusBar;

//获取状态栏指针

CStringstr,str1,str2,str3;

str2="宽1,";

str3="黑色";

str1=(m_typ==1)?

"正弦,":

"余弦,";

if(m_wid==2)//以下代码根据用户选择确定提示信息

str2="宽2,";

elseif(m_wid==3)

str2="宽3,";

if(m_col==RGB(255,0,0))

str3="红色";

elseif(m_col==RGB(0,0,255))

str3="蓝色";

str=str1+str2+str3;

if(m_able==0)str="选择曲线类型";//初始时状态栏中提示信息

pStatusBar->SetPaneText(1,str);//显示提示信息

}

⏹编译、链接并运行程序。

2.6实验结果

●实验心得:

本次实验虽然实验要求上的步骤写得比较的详细,一步一步的按着操作加代码完成了差不多,但是也出现了一些错误,比较繁琐。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2