1、MFC计算器课程设计报告MFC表达式计算器课程设计报告题目:利用MFC框架编写简易表达式计算器【分析】一设计过程1.Windows消息处理机制的理解 首先编写程序需要对Windows程序的消息处理机制(Message Handle)有个比较清晰的了解。Windows的程序都是通过消息来传送数据,有不需要用户参与的系统消息,比如异常处理等。还有用户消息,比如鼠标的单击,双击,键盘的键入等。2.界面的设计1)界面的初步设计仿照Windows附件里面的计算器,在资源视图中画好界面,如图:2)修改每个static的属性IDCAPTIONIDD_STATIC4简易表达式计算器 IDC_STATIC1待求
2、表达式IDC_STATIC2运算结果IDC_STATIC3系统当前时间3)修改每个button的属性IDC_BUTTON1等于(=)IDC_BUTTON2全清(C)IDC_BUTTON3清除 (A)结果如下图:4)修改每个button的处理机制在类向导Classwizard窗口中进行,如下图:其他button按钮的修改类似5)修改每个edit的类型和名称在类向导Classwizard窗口中进行:单击Add Variable按钮,在如下窗口中进行修改其他edit的修改类似最终结果如下:注:主要使用到Layout菜单中的Align功能对各个按钮进行对齐,使界面更加整洁。拖出的控件有上面的一个Edi
3、t控件用于显示数字,Button控件用于处理鼠标的消息。6)系统菜单的添加在Menu的IDR_MENU1中添加系统菜单:同理在“帮助”菜单中添加“关于”。二 设计步骤1. 添加头文件将Calculate.cpp(见附录)改为Calculate.h将其添加到计算器Dlg.cpp : implementation file中,如下:#include Calculate.h。2.成员函数及其释义:void CAboutDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CAboutDlg)
4、 /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog) /AFX_MSG_MAP(CAboutDlg) /AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDlg dialogCMyDlg:CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg:IDD, pParent) /AFX_DATA_INIT(CMyDlg) / NOTE: the ClassWizard will add member initialization here /AFX_DATA_INIT / Note that
5、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_time); DDX_Control(pDX, IDC_EDIT2, m_result); DDX_Control(pDX, IDC
6、_EDIT1, m_input); /AFX_DATA_MAPBEGIN_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)
7、ON_COMMAND(ID_QUIT, OnQuit) /AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDlg message handlers3.OnButton1()按钮的处理函数双击“等于(=)”按钮,添加如下代码:void CMyDlg:OnButton1() / TODO: Add your control notification handler code here CString str; char *ch; m_input.GetWindowText(str); ch = (LPSTR)(LPCTSTR)str; char ch250; strcpy(ch2
8、,ch); Cal a(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)”按钮
9、,添加如下代码:void CMyDlg:OnButton2() / TODO: Add your control notification handler code here m_result.SetWindowText(0); m_input.SetWindowText(); m_input.SetFocus(); / 函数的功能是把上次输入的表达式清空5.OnButton3()按钮的处理函数双击“全清(A)”按钮,添加如下代码:void CMyDlg:OnButton3() / TODO: Add your control notification handler code here m_
10、input.SetWindowText(); m_input.SetFocus(); /函数的功能是把上次输入的表达式和运算结果都清除6.OnTimer(UINT nIDEvent) 处理函数CWnd:SetTimer(1,500,NULL);/设置时间每隔500ms更新一次。void CMyDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call default CString ch = 日,一,二,三,四,五,六; SYSTEMTIME st; :GetLocalTime(&st);
11、CString str_temp; str_temp.Format(%u/%u/%u 星期+chst.wDayOfWeek+ %u:%u:%un,st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); m_time.SetWindowText(str_temp); CDialog:OnTimer(nIDEvent);/函数的功能是把运算结果显示在IDC_EDIT3中7.OnAbout()处理函数void CMyDlg:OnAbout() / TODO: Add your command handler code here CAbo
12、utDlg about; about.DoModal();/关于帮助和版权信息8.OnQuit()处理函数void CMyDlg:OnQuit() / TODO: Add your command handler code here OnOK();/退出主程序菜单9.全部代码如下:/ 计算器Dlg.cpp : implementation file/#include stdafx.h#include 计算器.h#include 计算器Dlg.h#include Calculate.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic
13、 char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic: 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/ Implementationprotected: /AFX_MSG(CAboutDlg) /AFX_MSG DECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD) /AFX_DATA_INIT(CAboutDlg) /AFX_DATA_INITvoid CAboutDlg:DoDataE
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1