资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
吕鑫 MFC 视频第二章答案之计算器按照题目要求做一个计算器可以进行加减乘除四项运算,我还照着 window 系统本身计算器的那样来做,增加了清屏,清行,以及删除,并且支持浮点数运算。使用的是 vs2013.如果发现错误,请大家多多指正!项目下载 http:/yunpan.cn/cgs5LjVHijzNG 7ed8程序下载 http:/yunpan.cn/cgs5jrJcY7yHJ 8436首先建立一个工程,我建立的工程名为“cal” ,选择对话框程序,然后建立按钮,编辑框进行界面布置 ,这个随意 id 设置自己知道就行了,我的 id 为上面的编辑框为: IDC_UP,属性多行,垂直滚动条,垂直滚动条居左,文本居右,禁止输入;下面的编辑框 id 为:IDC_DOWN,属性禁止输入,文本居右,数字按钮id 等于 IDC_(数字的英语单词) ,等于 id 为:IDOK,小数点:IDC_DOT ,加:IDC_ADD,减:IDC_MINUS,乘:IDC_MULTIPLY,除:IDC_REMOVE,CE:IDC_CE ,C:IDC_C,:IDC_DELETE, ,把对话框禁止改变大小,只使用最小化,最大化不适用,然后创建函数,这些不清楚的在看看吕老师的视频。头文件/ calDlg.h : 头文件/#pragma once/ CcalDlg 对话框class CcalDlg : public CDialogEx/ 构造public:CcalDlg(CWnd* pParent = NULL); / 标准构造函数/ 对话框数据enum IDD = IDD_CAL_DIALOG ;protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持/ 实现protected:HICON m_hIcon;/ 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedOk();afx_msg void OnBnClickedC();afx_msg void OnBnClickedThree();afx_msg void OnBnClickedOne();afx_msg void OnBnClickedTwo();afx_msg void OnBnClickedDelete();afx_msg void OnBnClickedCe();afx_msg void OnBnClickedFour();afx_msg void OnBnClickedFive();afx_msg void OnBnClickedSix();afx_msg void OnBnClickedSeven();afx_msg void OnBnClickedEnght();afx_msg void OnBnClickedNine();afx_msg void OnBnClickedNull();afx_msg void OnBnClickedRemove();afx_msg void OnBnClickedMultiply();afx_msg void OnBnClickedMinus();afx_msg void OnBnClickedAdd();double m_dLeft,m_dRight;/左值和右值CString m_szUp, m_szDown;/上面编辑框和下面编辑框,上面用于记录输入算式,下面用于接收输入BOOL m_bDot;int m_nCount;afx_msg void OnBnClickedDot();double sztod(CString str);/ afx_msg void OnSize(UINT nType, int cx, int cy);/ afx_msg void OnSize(UINT nType, int cx, int cy);/ afx_msg void OnSize(UINT nType, int cx, int cy);virtual BOOL PreTranslateMessage(MSG* pMsg);源文件/ calDlg.cpp : 实现文件/#include stdafx.h#include cal.h#include calDlg.h#include afxdialogex.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ CcalDlg 对话框CcalDlg:CcalDlg(CWnd* pParent /*=NULL*/): CDialogEx(CcalDlg:IDD, pParent)m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CcalDlg:DoDataExchange(CDataExchange* pDX)CDialogEx:DoDataExchange(pDX);BEGIN_MESSAGE_MAP(CcalDlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDOK, &CcalDlg:OnBnClickedOk)ON_BN_CLICKED(IDC_C, &CcalDlg:OnBnClickedC)ON_BN_CLICKED(IDC_THREE, &CcalDlg:OnBnClickedThree)ON_BN_CLICKED(IDC_ONE, &CcalDlg:OnBnClickedOne)ON_BN_CLICKED(IDC_TWO, &CcalDlg:OnBnClickedTwo)ON_BN_CLICKED(IDC_DELETE, &CcalDlg:OnBnClickedDelete)ON_BN_CLICKED(IDC_CE, &CcalDlg:OnBnClickedCe)ON_BN_CLICKED(IDC_FOUR, &CcalDlg:OnBnClickedFour)ON_BN_CLICKED(IDC_FIVE, &CcalDlg:OnBnClickedFive)ON_BN_CLICKED(IDC_SIX, &CcalDlg:OnBnClickedSix)ON_BN_CLICKED(IDC_SEVEN, &CcalDlg:OnBnClickedSeven)ON_BN_CLICKED(IDC_ENGHT, &CcalDlg:OnBnClickedEnght)ON_BN_CLICKED(IDC_NINE, &CcalDlg:OnBnClickedNine)ON_BN_CLICKED(IDC_NULL, &CcalDlg:OnBnClickedNull)ON_BN_CLICKED(IDC_REMOVE, &CcalDlg:OnBnClickedRemove)ON_BN_CLICKED(IDC_MULTIPLY, &CcalDlg:OnBnClickedMultiply)ON_BN_CLICKED(IDC_MINUS, &CcalDlg:OnBnClickedMinus)ON_BN_CLICKED(IDC_ADD, &CcalDlg:OnBnClickedAdd)ON_BN_CLICKED(IDC_DOT, &CcalDlg:OnBnClickedDot)/ ON_WM_SIZE()/ON_WM_SIZE()/ON_WM_SIZE()END_MESSAGE_MAP()/ CcalDlg 消息处理程序BOOL CcalDlg:OnInitDialog()CDialogEx:OnInitDialog();m_bDot = 1;/把值初始化为1,作用为防止一个数据输入多个小数点m_nCount = 0;/用来判断运算符号,1为加,2为减,3为乘,4为除/ 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动/ 执行此操作SetIcon(m_hIcon, TRUE); / 设置大图标SetIcon(m_hIcon, FALSE); / 设置小图标/ TODO: 在此添加额外的初始化代码return TRUE; / 除非将焦点设置到控件,否则返回 TRUE/ 如果向对话框添加最小化按钮,则需要下面的代码/ 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,/ 这将由框架自动完成。void CcalDlg:OnPaint()if (IsIconic()CPaintDC dc(this); / 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc(), 0);/ 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ 绘制图标dc.DrawIcon(x, y, m_hIcon);elseCDialogEx:OnPaint();/当用户拖动最小化窗口时系统调用此函数取得光标/显示。HCURSOR CcalDlg:OnQueryDragIcon()return static_cast(m_hIcon);void CcalDlg:OnBnClickedOk()/=按钮double dz;switch (m_nCount)/判断运算符case 1:/加法计算m_dRight = _tcstod(m_szDown, NULL);/字符串转doubledz = m_dLeft + m_dRight;/计算值m_szDown.Format(_T(%lf), dz);/double 转字符串sztod(m_szDown);/调用函数去0m_dLeft = dz;/把计算的总值付给左值,以便连续运算m_dRight = 0;/右值清空break;case 2:m_dRight = _tcstod(m_szDown, NULL);dz = m_dLeft - m_dRight;m_szDown.Format(_T(%lf), dz);sztod(m_szDown);m_dLeft = dz;m_dRight = 0;break;case 3:m_dRight = _tcstod(m_szDown, NULL);dz = m_dLeft * m_dRight;m_szDown.Format(_T(%lf), dz);sztod(m_szDown);m_dLeft = dz;m_dRight = 0;break;case 4:m_dRight = _tcstod(m_szDown, NULL);dz = m_dLeft / m_dRight;m_szDown.Format(_T(%lf), dz);sztod(m_szDown);m_dLeft = dz;m_dRight = 0;break;void CcalDlg:OnBnClickedC()/C按钮把输入全部清空,并把记录的输入字符串也清空,就是仿wi
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号