实验五MFC进行可视化编程.docx

上传人:b****5 文档编号:4827790 上传时间:2022-12-10 格式:DOCX 页数:14 大小:205.60KB
下载 相关 举报
实验五MFC进行可视化编程.docx_第1页
第1页 / 共14页
实验五MFC进行可视化编程.docx_第2页
第2页 / 共14页
实验五MFC进行可视化编程.docx_第3页
第3页 / 共14页
实验五MFC进行可视化编程.docx_第4页
第4页 / 共14页
实验五MFC进行可视化编程.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

实验五MFC进行可视化编程.docx

《实验五MFC进行可视化编程.docx》由会员分享,可在线阅读,更多相关《实验五MFC进行可视化编程.docx(14页珍藏版)》请在冰豆网上搜索。

实验五MFC进行可视化编程.docx

实验五MFC进行可视化编程

实验五MFC进行可视化编程

一、实验目的与要求

了解MFC类的层次结构及主要类的用法,掌握使用MFC和向导来编写Windows应用

程序。

要求:

(1)掌握MFC类的层次结构及主要类的用法。

(2)使用应用程序向导创建MFC类

的Windows应用程序。

二、基本知识点

类的概念。

MFC类的层次结构。

MFC类主要的类的用法。

应用程序向导的应用方法。

三、实验设备与平台

实验设备要求每个学生一台电脑,其中运行C++程序环境为VC++6.0系统或新版。

四、实验内容:

实验一、

本实验主要掌握VC++的一种编程方法,利用MFC(MicrosoftFoundationClass)和向导

(Wizard)来编写Windows应用程序,即首先使用ClassWizard来生成Windows应用程序

的基本框架,然后用ClassWizard来建立应用程序的类、消息处理、数据处理函数或定义控

件的属性、事件及方法,最后把各应用程序所要求的功能添加到类中,这种编写程序的方法

编写代码工作量小,系统自动生成了一些代码,从而编写起来方便。

MFC是用来编写Windows应用程序的VC++类集,该类集以层次结构组织起来,其中

封装了大部分WindowsAPI函数,它所包含的功能涉及到整个Windows操作系统。

MFC类

库是以层次结构的方式组织起来的,它的类按层次关系主要可划分为如下几类:

根类、应用

程序体系结构类、可视对象类、通用类、OLE类及ODBC数据库类。

应用程序向导为程序

员提供了一个基于MFC的应用程序框架,用户在此基础上添加实现特定功能的代码即可。

实验题目:

用MFC的向导创建编辑框,在编辑框中实现算术“加”、“减气“乘”及“除”

的运算,界面如图13.1所示。

图13-1具有“加气“减”、“乘”及“除”运算功能的界面

实验步骤:

1、利用MFC向导建立程序框架,在MFCAppWizardStepl中选择Dialogbasedo其余都采

用默认选项。

这样建立了一个基于对话框的程序。

2、利用资源编辑器,建立对话框:

在ResourceView选项卡中打开Dialog资源组,由于程

序的文件名为editor,因此,系统自动产生一个名为IDD_editor_DIALOG的资源文件,在

ResourceView资源组框中双击IDD_editor_DIALOG,如图13-2所示。

然后在右边的窗口中

显示出待编辑的对话框。

根据如图13-1所示的样式建立对话框。

-Heditorresources

-Dialog

"圄IDD_ABOUTBOX

L国IDD_editor_DIALOG

-Icon

L□IDR_MAINFRAME

日StringTable

ateStringTable

-Version^

国VS_VERSION_INFO

■5Class...*E)Reso...FileVi...

图13-2ResourceView资源组框

下面以“数据1”编辑框和“加”按钮为例介绍控件的创建过程,其余的编辑框和按钮

可参照此操作:

(1)在控件工具栏中选择“编辑框”,在控件工具上单击鼠标左键,在如图13-1所示的对

话框编辑窗口上“数据1”编辑框的位置上,画出一个大小合适的编辑框。

然后在对话框上

单击鼠标右键,对该编辑框上的Properties属性进行设置,如图13-3所示,设置对话框的ID

属性。

图13-3EditProperties对话框

 

(2)在图13-1的“加”按钮的位置上,画出一个大小合适的下压式按钮。

设置该按钮的

Properties选项,如图13-4所示,设置该控件的ID值和Caption属性。

图13-4按钮“加”的属性设置

按照上面的操作过程编辑各按钮或编辑框等对象的属性。

见表13-1所示。

表13-1对象属性表

对象

ID

Caption

编辑框

IDCITEM1EDIT

编辑框

IDCITEM1EDIT

编辑框

IDCRESULTEDIT

按钮

IDCADDBUTTON

Add

按钮

IDCDIFFERENCEBUTTON

Difference

按钮

IDCMULTIPLYBUTTON

Multiply

按钮

IDCDEVIDEBUTTON

Devide

按钮

IDCEXITBUTTON

Exit

(3)添加代码

1)给编辑框连接变量:

在任何一个编辑框上单击鼠标右键,设置ClassWizard菜单项,

弹出MFCClassWizard对话框,选择MemberVariables选项卡。

然后在ControlIDs列表框

中,选中IDC_ITEM1_EDIT,单击AddVariable按钮,在弹出的对话框中连接变量

m_Iteml_Edit;同样的方法添加其它变量。

2)给四个按钮连接代码:

在“加”按钮上单击鼠标右键,选择ClassWizard,在弹出的

对话框中选择MessageMaps选项卡,在ObjectIDs列表框中选择IDC_ADD_BUTTON,在

Messages列表框中选择BN.CLICKED选项,即选择单击按钮事件。

单击右边的AddFunction

按钮,在弹出的对话框中接受默认的名字,执行结果如图13-6所示。

单击EditCode按钮,

此时显示源代码文件,在函数OnAddButton()中输入相应代码。

图13-6为按钮连接代码

voidCEditorDlg:

:

OnAddButton()

〃此处填写加法的代码。

3)同样的可以给“减”、“乘气“除”按钮连接代码,不同的是消息映射函数中执行减、

乘及除的操作。

减的操作代码:

voidCEditorDlg:

:

OnDifferenceButton()

〃此处填写减的代码。

乘的操作代码:

voidCEditorDlg:

:

OnMultiplyButton()

〃此处填写乘的代码。

除的操作代码:

voidCEditorDlg:

:

OnDevideButton()

〃此处填写除的代码。

}

4)给“退出“按钮连接代码,利用ClassWizard将按钮消息BN_CLICKED加到函数

OnExitButton()中,例如F列代码:

voidCEditorDlg:

:

OnExitButton()

OnOK();

}

3、建立并运行程序

运行后该编辑框能实现“加”、“减”、“乘”及“除”的运算。

如图13-7所示。

图13-7实现“加"、"减”、“乘”及“除”的运算

实验二、

本实验的主要内容是文档与视图,主要是关于用AppWizard和MFC类库所写程序用

到文档与视图的结构,文档和视图是MFC应用程序最主要的对象。

文档用于管理应用程序

的数据,视图用于显示文档管理和用户的交互。

定义和操纵数据的代码在文档类中实现,而

显示数据并解释用户的代码则在视图类中实现。

文档类和视图类的交互式通过这两类中的成员函数实现的。

CDocument类是所有文档

的基类,提供了用户自定义文档类的基本功能。

CView类则是所有视图类的基类,提供了用

户自定义视图类的框架。

文档和视图类的关系如图14-1所示。

磁盘文件或网络数据等介质

通过文档类的成员函数

文档对象

用户

图14-1文档/视图结构关系图

实验题目:

利用文档/视图结构创建一个绘图板,使其能绘画各种直线,具有新建空白窗口,

重画窗口时可以恢复直线等功能。

实验步骤:

1.创建应用程序的基本框架

使用MFCAppWizard来建立应用程序的基本框架,设置该Project的名字为“MyExam”。

并且在“MFCAppWizard-Stepl”对话框中选择“Singledocument”选项,表示要生成SDI

应用程序。

2.视图的处理

(1)在视图类中添加数据成员

首先,打开文件MyExamView.h,将以下语句添加到MyExamView类定义中:

protected:

intm_Draw;

HCURSORm_Hcursor;

CPointm_p01d;

CPointm_pOrigin;

接着,打开文件,将以下代码添加到CmyExamView类的构造函数中,以便初始化数据

成员m_Draw和m_Hcursor:

m_Draw=0;

m_Hcursoi-AfxGetApp()->LoadStandardCursor(IDC_CROSS);

(2)用ClassWizard映射鼠标消息

1)从“View”菜单选择“ClassWizard”命令,弹出“MFCClassWizard”对话框,选择

uMessageMaps,,选项卡。

2)从“Classname”中选择类名"CMyExamView”。

3)在“ObjectIDs”中选择“CMyExamView”。

4)在“Messages”中选择要映射的鼠标消息为WM_LBUTTONDOWN(单击鼠标左键),

然后单击“AddFunction”按钮。

5)重复(4),映射鼠标消息WM_MOUSEMOVE(移动鼠标到新的位置)和

WM_LBUTTONUP(释放鼠标左键)。

结果如图14-2所示。

■FCClassWizard

图14-2映射鼠标消息后的结果

Memberfunctions:

VOnBeginPrinting

VOnDraw

VOnEndPrinting

A

S3OnLButtonDownON_WM_LBUTTONDOWN

1

WOnLButtonUpON_WM_LBUTTONUP

V

(3)添加消息处理函数代码

1)在消息处理函数CMyExamView:

:

OnLButtonDown中添加一下代码:

m_pOld=point;

m_pOrigin二point;

SetCapture();

m_Draw=1;

RECTrect;

GetClientRect(&rect);

ClientToScreen(&rect);

ClipCursor(&rect);

2)在消息处理函数CMyExamView:

:

OnMouseMove中添加一下代码:

SetCursor(m_Hcursor);

if(m_Draw)

CClientDCdc(this);

dc.SetROP2(R2_NOT);

dc.MoveTo(m_pOrigin);

dc.LineTo(m_pOld);

dc.MoveTo(m_pOrigin);

dc.LineTo(point);

m_pOld=point;

}

3)在消息处理函数CMyExamView:

:

OnLButtonUp中添加一下代码:

if(m_Draw)

m_Draw=O;

ReleaseCapture();

ClipCursor(NULL);

}

图14-3运行MyExam应用程序并画各种直线

4)建立并运行程序

运行结果如图14-3所示,可以用鼠标画各种直线后的结果。

3、文档的处理

对于用户在视图窗口中所画的直线,可以在文档类中添加数据成员来存放直线的坐标,

以便在重画窗口时可以恢复直线。

(1)在文档中存放直线坐标。

1)在文档类头文件MyExamDoc.h中添加类CMyLine来存放直线的坐标。

classCMyLine:

publicCObject

protected:

intm_StartX;

intm_StartY;

intm_EndX;

intm_EndY;

public:

CMyLine(intStartX,intStartY,intEndX,intEndY);

voidDrawLine(CDC*pDC);

};

2)在文档类头文件MyExamDoc.h中添加成员函数,以便其他类能够处理文档的数据成

员。

protected:

CObArraym_ObArray;

public:

voidAddLine(intStartX,intStartY,intEndX,intEndY);

CMyLine*GetLine(intindex);

intGetTotalLine();

3)在文档类头文件中添加成员函数的定义

CMyLine:

:

CMyLine(intStartX,intStartY,intEndX,intEndY)

{

m_StartX=StartX;

m_StartY=StartY;

m_EndX=EndX;

m_EndY=EndY;

);

voidCMyLine:

:

DrawLine(CDC*pDC)

pDC->MoveTo(m_StartX,m_StartY);

pDC->LineTo(m_EndX,m_EndY);

};

voidCMyExamDoc:

:

AddLine(intStartX,intStartYjntEndX,intEndY)

CMyLine*pMyLine=newCMyLine(StartX,StartY,EndX,EndY);

m_ObArray.Add(pMyLine);

);

CMyLine^CMyExamDoc:

:

GetLine(intindex)

{

if(index<0||index>m_perBound())

return0;

return(CMyLine*)m_(index);

);

intCMyExamDoc:

:

GetTotalLine()

returnm_ze();

};

(2)画完直线后存放直线坐标

在消息处理函数CMyExamView:

:

OnLButtonUp中添加一下代码,以便在画完直线释放鼠

标时存放直线的坐标:

CMyExamDoc*pDoc=GetDocument();

pDoc->AddLine(m_pOrigin.x,m_pOrigin.y,point.x,point.y);

(3)修改视图的OnDraw成员函数。

为了使视图窗口重新绘制时,可以根据存放在文档类中的数据来恢复直线,有必要往

OnDraw函数中添加一下代码:

intindex;

index=pDoc->GetTotalLine();

while(index—)

pDoc->GetLine(index)->DrawLine(pDC);

(4)删除文档数据

初始化新文档之前,必须要删除存放在当前文档中的数据,在文档类的头文件

MyExamDoc.h中添加一下代码:

virtualvoidDeleteContents();

接着,在文档类的实现文件中添加以下代码:

voidCMyExamDoc:

:

DeleteContents()

intindex;

index=m_ze();

while(index—)

deletem_(index);

m_eAll();

}

(5)建立并运行程序

运行后可以在视图窗口中画各种直线,由于在文档中存放所画的直线,所以在窗口缩放

和移动时将恢复所画的直线,而且实现了新建空白窗口的功能,如图14.4所示。

图14-4运行MyExam应用程序并画各种直线

五、学生实验报告要求

1>完成编写相关实验代码

2、实验步骤和实验结果

3、实验中的问题和提高

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

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1