使用MFC进行可视化编程

使用MFC进行可视化编程
使用MFC进行可视化编程

学生实验报告

开课实验室: 2011年6月25日

学院年级、专

业、班

姓名学号

实验课程名称面向对象程序设计实验成绩

实验项目名称使用MFC进行可视化编程指导

老师

一、实验目的及要求:

了解MFC类的层次结构及主要类的用法,掌握使用MFC和向导来编写Windows应用程序。控件是Windows图形用户界面的主要组成部分之一,用户通过操作控件对象完成与应用程序之间的交互。本实验要求通过对控件相关知识的学习,目的是要掌握静态控件、按钮、流动条、编辑框、列表框、组合框和对话框的创建、消息发送和控件控制等内容。

要求:(1)掌握MFC类的层次结构及主要类的用法。(2)使用应用程序向导创建MFC类的Windows应用程序。(3)使用静态控件、按钮、流动条、编辑框、列表框、组合框和对话框等创建应用程序。

二、实验设备

计算机:PC系统

软件平台:Windows XP操作系统,Visual C++ 6.0集成开发系统。

三、实验原理

利用Visual C++ 6.0开发环境,对实验所要求的程序设计项目,编辑C语言源程序并形成 .cpp 源代码文件,再编译.cpp 文件形成 .boj 目标代码文件,经过.boj文件与系统标准代码的连接形成 .exe 可执行代码文件,运行.exe文件以得到实验所期望的结果。

四、实验步骤

1. 打开PC机并启动Windows XP操作系统(利用实验设备)

2. 开启Visual C++ 6.0集成开发系统(形成软件开发环境)

3. 程序设计(按要求可先设计算法并给出流程图)

4. 编辑(生成 .cpp源程序文件)

5. 编译(调试并生成 .boj 目标文件)

6. 连接(调试并生成 .exe 可执行文件)

7. 运行(调试并得到预期的程序执行结果)

8. 按实验要求分析实验结果

五、实验过程及原始纪录(数据,图表,计算等)

六、实验结果及分析

8.1_1:用MFC的向导创建编辑框,在编辑框中实现算术“加”、“减”、“乘”及“除”的运算,界面如图13-1所示。

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

实验步骤:

1、利用MFC向导建立程序框架,在MFC AppWizard Step1中选择Dialog based。其余都采用默认选项。这样建立了一个基于对话框的程序。

2、利用资源编辑器,建立对话框:在Resource View 选项卡中打开Dialog资源组,由于程序的文件名为editor, 因此,系统自动产生一个名为IDD_editor_DIALOG的资源文件,在ResourceView资源组框中双击IDD_editor_DIALOG,如图13-2所示。然后在右边的窗口中显示出待编辑的对话框。根据如图13-1所示的样式建立对话框。

图13-2 ResourceView资源组框

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

(1) 在控件工具栏中选择“编辑框”,在控件工具上单击鼠标左键,在如图13-1所示的对话框编辑窗口上“数据1”编辑框的位置上,画出一个大小合适的编辑框。然后在对话框上单击鼠标右键,对该编辑框上的Properties属性进行设置,如图13-3所示,设置对话框的ID属性。

图13-3 Edit Properties对话框

(2) 在图13-1的“加”按钮的位置上,画出一个大小合适的下压式按钮。设置该按钮的Properties 选项,如图13-4所示,设置该控件的ID值和Caption属性。

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

按照上面的操作过程编辑各按钮或编辑框等对象的属性。见表13-1所示。

表13-1 对象属性表

对象ID Caption

编辑框IDC_ITEM1_EDIT

编辑框IDC_ITEM1_EDIT

编辑框IDC_RESULT _EDIT

按钮IDC_ADD_BUTTON Add

按钮IDC_DIFFERENCE_BUTTON Difference

按钮IDC_MULTIPLY_BUTTON Multiply

按钮IDC_DEVIDE_BUTTON Devide

按钮IDC_EXIT_BUTTON Exit

(3) 添加代码

1)给编辑框连接变量:在任何一个编辑框上单击鼠标右键,设置ClassWizard菜单项,弹出MFC Class Wizard对话框,选择Member Variables 选项卡。然后在Control IDs 列表框中,选中IDC_ITEM1_EDIT,单击Add Variable按钮,在弹出的对话框中连接变量m_Item1_Edit.,结果如图13-5所示。按照上面的操作过程给另两个编辑框加入变量见表13-2所示。

图13-5 MFC Wizard中的Member Variables选项卡

表13-2 三个编辑框变量表

ID 变量变量类型

ID_ITEM1_EDIT m_Item1_Edit CEdit

ID_ITEM2_EDIT m_Item1_Edit CEdit

ID_ITEM3_EDIT m_Item1_Edit Cstring

2)给四个按钮连接代码:在“加”按钮上单击鼠标右键,选择ClassWizard,在弹出的对话框中选择Message Maps选项卡,在Object IDs列表框中选择IDC_ADD_BUTTON,在Messages列表框中选择BN_CLICKED选项,即选择单击按钮事件。单击右边的Add Function按钮,在弹出的对话框中接受默认的名字,执行结果如图13-6所示。单击Edit Code 按钮,此时显示源代码文件,在函数OnAddButton()中输入下列代码:

图13-6 为按钮连接代码

void CEditorDlg::OnAddButton()

{

char cstrItem1[10],cstrItem2[10];

double dfItem1,dfItem2,dfResult;

char cBuffer[10];

m_Item1_Edit.GetWindowText(cstrItem1,10);

m_Item2_Edit.GetWindowText(cstrItem2,10);

dfItem1=atof((LPCSTR)cstrItem1);

dfItem2=atof((LPCSTR)cstrItem2);

dfResult=dfItem1+dfItem2;

_gcvt (dfResult,10,cBuffer);

m_sResult_Edit=(LPCSTR)cBuffer;

UpdateData(FALSE);

}

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

减的操作代码如下:

void CEditorDlg::OnDifferenceButton()

{

char cstrItem1[10],cstrItem2[10];

double dfItem1,dfItem2,dfResult;

char cBuffer[10];

m_Item1_Edit.GetWindowText(cstrItem1,10);

m_Item2_Edit.GetWindowText(cstrItem2,10);

dfItem1=atof((LPCSTR)cstrItem1);

dfItem2=atof((LPCSTR)cstrItem2);

dfResult=dfItem1-dfItem2;

_gcvt(dfResult,10,cBuffer);

m_sResult_Edit=(LPCSTR)cBuffer;

UpdateData(FALSE);

}

乘的操作代码如下:

void CEditorDlg::OnMultiplyButton()

{

char cstrItem1[10],cstrItem2[10];

double dfItem1,dfItem2,dfResult;

char cBuffer[10];

m_Item1_Edit.GetWindowText(cstrItem1,10);

m_Item2_Edit.GetWindowText(cstrItem2,10);

dfItem1=atof((LPCSTR)cstrItem1);

dfItem2=atof((LPCSTR)cstrItem2);

dfResult=dfItem1*dfItem2;

_gcvt(dfResult,10,cBuffer);

m_sResult_Edit=(LPCSTR)cBuffer;

UpdateData(FALSE);

}

除的操作代码如下:

void CEditorDlg::OnDevideButton()

{

char cstrItem1[10],cstrItem2[10];

double dfItem1,dfItem2,dfResult;

char cBuffer[10];

m_Item1_Edit.GetWindowText(cstrItem1,10);

m_Item2_Edit.GetWindowText(cstrItem2,10);

dfItem1=atof((LPCSTR)cstrItem1);

dfItem2=atof((LPCSTR)cstrItem2);

dfResult=dfItem1/dfItem2;

_gcvt(dfResult,10,cBuffer);

m_sResult_Edit=(LPCSTR)cBuffer;

UpdateData(FALSE);

}

4)给“退出“按钮连接代码,利用ClassWizard将按钮消息BN_CLICKED加到函数OnExitButton( )中,例如下列代码:

void CEditorDlg::OnExitButton()

{

OnOK();

}

3、建立并运行程序

运行后该编辑框能实现“加”、“减”、“乘”及“除”的运算。如图13-7所示。

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

#include "stdafx.h"

#include "加减乘除.h"

#include "加减乘除Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)

: CDialog(CMyDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CMyDlg)

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CMyDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMyDlg)

DDX_Control(pDX, IDC_EDIT3, m_Data3_Edit3);

DDX_Control(pDX, IDC_EDIT2, m_Data2_Edit2);

DDX_Control(pDX, IDC_EDIT1, m_Data1_Edit1);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)

//{{AFX_MSG_MAP(CMyDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_Exit_BUTTON3, OnExitBUTTON3)

ON_BN_CLICKED(IDC_Plus_BUTTON1, OnPlusBUTTON1)

ON_BN_CLICKED(IDC_Cut_BUTTON2, OnCutBUTTON2)

ON_BN_CLICKED(IDC_Multiply_BUTTON4, OnMultiplyBUTTON4)

ON_BN_CLICKED(IDC_Except_BUTTON5, OnExceptBUTTON5)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMyDlg message handlers

BOOL CMyDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control

}

void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

if ((nID & 0xFFF0) == IDM_ABOUTBOX)

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CMyDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CMyDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CMyDlg::OnExitBUTTON3()

{

OnOK();

// TODO: Add your control notification handler code here

}

void CMyDlg::OnPlusBUTTON1()

{

double sum=0;

char Result[10];

m_Data1_Edit1.GetWindowText(Result,10);

sum+=atof(Result);

m_Data2_Edit2.GetWindowText(Result,10);

sum+=atof(Result);

sprintf(Result,"%.3f",sum);

m_Data3_Edit3.SetWindowText(Result);

// TODO: Add your control notification handler code here

}

void CMyDlg::OnCutBUTTON2()

{

double mission=0;

char Result[10];

m_Data1_Edit1.GetWindowText(Result,10);

mission+=atof(Result);

m_Data2_Edit2.GetWindowText(Result,10);

mission-=atof(Result);

sprintf(Result,"%.3f",mission);

m_Data3_Edit3.SetWindowText(Result);

// TODO: Add your control notification handler code here

}

void CMyDlg::OnMultiplyBUTTON4()

{

double indigestion=0;

char Result[10];

m_Data1_Edit1.GetWindowText(Result,10);

indigestion+=atof(Result);

m_Data2_Edit2.GetWindowText(Result,10);

indigestion*=atof(Result);

sprintf(Result,"%.3f",indigestion);

m_Data3_Edit3.SetWindowText(Result);

// TODO: Add your control notification handler code here

void CMyDlg::OnExceptBUTTON5()

{

double trader=0;

char Result[10];

m_Data1_Edit1.GetWindowText(Result,10);

trader+=atof(Result);

m_Data2_Edit2.GetWindowText(Result,10);

trader/=atof(Result);

sprintf(Result,"%.3f",trader);

m_Data3_Edit3.SetWindowText(Result);

// TODO: Add your control notification handler code here }

输出结果:

相关主题
相关文档
最新文档