MFC计算器课程设计报告.docx

上传人:b****3 文档编号:1160013 上传时间:2022-10-18 格式:DOCX 页数:28 大小:185.57KB
下载 相关 举报
MFC计算器课程设计报告.docx_第1页
第1页 / 共28页
MFC计算器课程设计报告.docx_第2页
第2页 / 共28页
MFC计算器课程设计报告.docx_第3页
第3页 / 共28页
MFC计算器课程设计报告.docx_第4页
第4页 / 共28页
MFC计算器课程设计报告.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

MFC计算器课程设计报告.docx

《MFC计算器课程设计报告.docx》由会员分享,可在线阅读,更多相关《MFC计算器课程设计报告.docx(28页珍藏版)》请在冰豆网上搜索。

MFC计算器课程设计报告.docx

MFC计算器课程设计报告

MFC表达式计算器课程设计报告

题目:

利用MFC框架编写简易表达式计算器

【分析】

一.设计过程

1.Windows消息处理机制的理解

首先编写程序需要对Windows程序的消息处理机制(MessageHandle)有个比较清晰的了解。

Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。

还有用户消息,比如鼠标的单击,双击,键盘的键入等。

2.界面的设计

1)界面的初步设计

仿照Windows附件里面的计算器,在资源视图中画好界面,如图:

2)修改每个static的属性

ID

CAPTION

IDD_STATIC4

简易表达式计算器

IDC_STATIC1

待求表达式

IDC_STATIC2

运算结果

IDC_STATIC3

系统当前时间

3)修改每个button的属性

IDC_BUTTON1

等于(=)

IDC_BUTTON2

全清(C)

IDC_BUTTON3

清除(A)

结果如下图:

4)修改每个button的处理机制

在类向导Classwizard窗口中进行,如下图:

其他button按钮的修改类似

5)修改每个edit的类型和名称

在类向导Classwizard窗口中进行:

单击AddVariable按钮,在如下窗口中进行修改

其他edit的修改类似

最终结果如下:

注:

主要使用到Layout菜单中的Align功能对各个按钮进行对齐,使界面更加整洁。

拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。

 

6)系统菜单的添加

在Menu的IDR_MENU1中添加系统菜单:

同理在“帮助”菜单中添加“关于”。

二.设计步骤

1.添加头文件

将Calculate.cpp(见附录)改为Calculate.h将其添加到计算器Dlg.cpp:

implementationfile中,如下:

#include"Calculate.h"。

2.成员函数及其释义:

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

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

//CMyDlgdialog

CMyDlg:

:

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

:

CDialog(CMyDlg:

:

IDD,pParent)

{

//{{AFX_DATA_INIT(CMyDlg)

//NOTE:

theClassWizardwilladdmemberinitializationhere

//}}AFX_DATA_INIT

//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCMyDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMyDlg)

DDX_Control(pDX,IDC_EDIT3,m_time);

DDX_Control(pDX,IDC_EDIT2,m_result);

DDX_Control(pDX,IDC_EDIT1,m_input);

//}}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_BUTTON1,OnButton1)

ON_BN_CLICKED(IDC_BUTTON2,OnButton2)

ON_WM_TIMER()

ON_BN_CLICKED(IDC_BUTTON3,OnButton3)

ON_COMMAND(ID_ABOUT,OnAbout)

ON_COMMAND(ID_QUIT,OnQuit)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

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

//CMyDlgmessagehandlers

3.OnButton1()按钮的处理函数

双击“等于(=)”按钮,添加如下代码:

voidCMyDlg:

:

OnButton1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CStringstr;

char*ch;

m_input.GetWindowText(str);

ch=(LPSTR)(LPCTSTR)str;

charch2[50];

strcpy(ch2,ch);

Cala(ch2);

if(!

a.OK)

{m_result.SetWindowText("表达式不合法!

");//表达式不合法,判别出来并给出相应的错误提示

}

else

{if(a.Sign)

{m_result.SetWindowText("除数为零!

");//表达式不合法,可以判别出来并给出相应的错误提示

}

else

{str.Format("%lf",a.GetV());

m_result.SetWindowText(str);

}

}

}

以OnButton1()作为求值处理函数,函数的功能是单击等于(=)按钮,运算结果显示在IDC_EDIT2中

4.OnButton2()按钮的处理函数

双击“清除(C)”按钮,添加如下代码:

voidCMyDlg:

:

OnButton2()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

m_result.SetWindowText("0");

m_input.SetWindowText("");

m_input.SetFocus();

}

//函数的功能是把上次输入的表达式清空

5.OnButton3()按钮的处理函数

双击“全清(A)”按钮,添加如下代码:

voidCMyDlg:

:

OnButton3()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

m_input.SetWindowText("");

m_input.SetFocus();

}

//函数的功能是把上次输入的表达式和运算结果都清除

6.OnTimer(UINTnIDEvent)处理函数

CWnd:

:

SetTimer(1,500,NULL);//设置时间每隔500ms更新一次。

voidCMyDlg:

:

OnTimer(UINTnIDEvent)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

CStringch[]={"日","一","二","三","四","五","六"};

SYSTEMTIMEst;

:

:

GetLocalTime(&st);

CStringstr_temp;

str_temp.Format("%u/%u/%u星期"+ch[st.wDayOfWeek]+"%u:

%u:

%u\n",st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);

m_time.SetWindowText(str_temp);

CDialog:

:

OnTimer(nIDEvent);

}//函数的功能是把运算结果显示在IDC_EDIT3中

7.OnAbout()处理函数

voidCMyDlg:

:

OnAbout()

{

//TODO:

Addyourcommandhandlercodehere

CAboutDlgabout;

about.DoModal();

}

//关于帮助和版权信息

8.OnQuit()处理函数

voidCMyDlg:

:

OnQuit()

{

//TODO:

Addyourcommandhandlercodehere

OnOK();

}

//退出主程序菜单

9.全部代码如下:

//计算器Dlg.cpp:

implementationfile

//

#include"stdafx.h"

#include"计算器.h"

#include"计算器Dlg.h"

#include"Calculate.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:

:

DoDataE

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

当前位置:首页 > 工程科技 > 能源化工

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

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