编辑一个小型计算器要求使用MFC.docx
《编辑一个小型计算器要求使用MFC.docx》由会员分享,可在线阅读,更多相关《编辑一个小型计算器要求使用MFC.docx(15页珍藏版)》请在冰豆网上搜索。
编辑一个小型计算器要求使用MFC
课程实验报告
课程名称
C++面向对象程序设计
班级
实验日期
2014.6.6-
2014.6.20
姓名
学号
实验成绩
实验名称
编辑一个小型计算器(要求使用MFC)
实
验
目
的
及
要
求
1.学习使用VisualC++的MFC开发程序的步骤。
2.综合运用所学的类、继承和多态的知识开发程序。
3.进一步熟练掌握程序调试方法。
实
验
环
境
VisualC++6.0
实
验
内
容
实验内容具体描述:
1.利用MFC的向导创建基于对话框的应用程序,添加按钮、编辑框等控件。
2.实现算术“加、减、乘、除”的运算。
3.选作添加计算三角函数运算、对数运算、指数运算、进制转换等功能。
算
法
描
述
及
实
验
步
骤
算法设计思想与算法实现步骤:
1.利用MFCAppWizard向导建立程序框架,建立一个基于对话框的程序,项目名为MyCal。
2.利用资源编辑器,建立对话框。
添加一个编辑框,设置ID属性。
3.在控件工具栏中选择“Button”,添加一个按钮,鼠标右键单击该编辑框,在弹出快捷菜单中选择“Properties”,设置ID值和Caption属性。
4.依次添加若干编辑框和按钮,分别用于加减乘除操作及相应的操作数据。
编辑界面。
5.给编辑框连接变量。
在编辑框处点击右键选择“ClassWizard”,在弹出的对话框中选择“MemberVariables”选项卡,找到编辑框ID,选择“AddVariable”按钮,添加变量m_dispiay。
6.给按钮连接代码。
调
试
过
程
及
实
验
结
果
调试过程中出现的问题及解决方法。
记录实验执行的结果:
测试数据8*5
40.000000
总
结
实验结果进行分析,问题回答,实验心得体会及改进意见:
1.通过本次实验,初步掌握了MFC的基本使用操作,学会了掌握添加按钮、编辑框等控件。
2.对MFC的理解无非就是对按钮和编辑框链接相应的函数操作即可。
3.程序中出现了关于visualc++版本的要求,在编译时提示缺少MFC42D.DLL、MFCO42D.DLL、MSVCRTD.dll等提示
附
录
源程序清单:
//MyCalDlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"MyCal.h"
#include"MyCalDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMyCalDlgdialog
CMyCalDlg:
:
CMyCalDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMyCalDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CMyCalDlg)
m_display=_T("");
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
voidCMyCalDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyCalDlg)
DDX_Text(pDX,IDC_EDIT1,m_display);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyCalDlg,CDialog)
//{{AFX_MSG_MAP(CMyCalDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON20,On_add)
ON_BN_CLICKED(IDC_BUTTON17,On_divide)
ON_BN_CLICKED(IDC_BUTTON9,On_equal)
ON_BN_CLICKED(IDC_BUTTON1,On_one)
ON_BN_CLICKED(IDC_BUTTON2,On_two)
ON_BN_CLICKED(IDC_BUTTON5,On_three)
ON_BN_CLICKED(IDC_BUTTON11,On_four)
ON_BN_CLICKED(IDC_BUTTON3,On_five)
ON_BN_CLICKED(IDC_BUTTON6,On_six)
ON_BN_CLICKED(IDC_BUTTON10,On_seven)
ON_BN_CLICKED(IDC_BUTTON12,On_eight)
ON_BN_CLICKED(IDC_BUTTON4,On_nine)
ON_BN_CLICKED(IDC_BUTTON8,On_zero)
ON_BN_CLICKED(IDC_BUTTON7,On_plus_minus)
ON_BN_CLICKED(IDC_BUTTON19,On_cut)
ON_BN_CLICKED(IDC_BUTTON18,On_multiply)
ON_BN_CLICKED(IDC_BUTTON16,On_CE)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CMyCalDlgmessagehandlers
BOOLCMyCalDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCMyCalDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCMyCalDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCMyCalDlg:
:
OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}
voidCMyCalDlg:
:
On_add()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
op='+';
//m_preNum=GetNum();
sscanf(m_display,"%lf",&m_preNum);
m_display="\0";
UpdateData(false);
}
voidCMyCalDlg:
:
On_cut()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
op='-';
//m_preNum=GetNum();
sscanf(m_display,"%lf",&m_preNum);
m_display="\0";
UpdateData(false);
}
voidCMyCalDlg:
:
On_multiply()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
op='*';
//m_preNum=GetNum();
sscanf(m_display,"%lf",&m_preNum);
m_display="\0";
UpdateData(false);
}
voidCMyCalDlg:
:
On_divide()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
op='/';
sscanf(m_display,"%lf",&m_preNum);
m_display="\0";
UpdateData(false);
}
voidCMyCalDlg:
:
On_equal()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
doubleresult=0;
sscanf(m_display,"%lf",&m_curNum);
switch(op)
{
case'+':
result=m_preNum+m_curNum;break;
case'-':
result=m_preNum-m_curNum;break;
case'*':
result=m_preNum*m_curNum;break;
case'/':
result=m_preNum/m_curNum;break;
}
m_preNum=result;
chars[256]={0};
sprintf(s,"%lf",result);
m_display=s;
UpdateData(false);
}
voidCMyCalDlg:
:
On_one()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="1";
UpdateData(false);
}
voidCMyCalDlg:
:
On_two()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="2";
UpdateData(false);
}
voidCMyCalDlg:
:
On_three()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="3";
UpdateData(false);
}
voidCMyCalDlg:
:
On_four()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="4";
UpdateData(false);
}
voidCMyCalDlg:
:
On_five()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="5";
UpdateData(false);
}
voidCMyCalDlg:
:
On_six()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="6";
UpdateData(false);
}
voidCMyCalDlg:
:
On_seven()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="7";
UpdateData(false);
}
voidCMyCalDlg:
:
On_eight()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="8";
UpdateData(false);
}
voidCMyCalDlg:
:
On_nine()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="9";
UpdateData(false);
}
voidCMyCalDlg:
:
On_zero()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display+="0";
UpdateData(false);
}
voidCMyCalDlg:
:
On_plus_minus()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
chars[256]={0};
sscanf(m_display,"%lf",s);
m_display="-";
m_display+=s;
UpdateData(false);
}
voidCMyCalDlg:
:
On_CE()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_display="\0";
m_preNum=0;
m_curNum=0;
UpdateData(false);
}