• 计算器简易实现


    // TESTDlg.cpp : 实现文件
    //
    
    #include "stdafx.h"
    #include<windows.h>
    #include "TEST.h"
    #include "TESTDlg.h"
    #include "afxdialogex.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    #define TAG_ADD 1
    #define TAG_SUB 2
    #define  TAG_MUL 3
    #define TAG_DIV 4
    int FirstNumber;
    int SecondNumber;
    
    // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
    
    class CAboutDlg : public CDialogEx
    {
    public:
        CAboutDlg();
    
    // 对话框数据
        enum { IDD = IDD_ABOUTBOX };
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    
    // 实现
    protected:
        DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CTESTDlg 对话框
    
    
    
    CTESTDlg::CTESTDlg(CWnd* pParent /*=NULL*/)
        : CDialogEx(CTESTDlg::IDD, pParent)
        , Result(_T(""))
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CTESTDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Text(pDX, IDC_EDIT1, Result);
    }
    
    BEGIN_MESSAGE_MAP(CTESTDlg, CDialogEx)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_EN_CHANGE(IDC_EDIT1, &CTESTDlg::OnEnChangeEdit1)
        
        ON_BN_CLICKED(ADD, &CTESTDlg::OnClickedAdd)
        ON_BN_CLICKED(DIV, &CTESTDlg::OnClickedDiv)
        ON_BN_CLICKED(EQUAL, &CTESTDlg::OnClickedEqual)
        ON_BN_CLICKED(CLEAR, &CTESTDlg::OnClickedClear)
        ON_BN_CLICKED(MUL, &CTESTDlg::OnClickedMul)
        ON_BN_CLICKED(NUBER9, &CTESTDlg::OnClickedNuber9)
        ON_BN_CLICKED(NUMBER0, &CTESTDlg::OnClickedNumber0)
        ON_BN_CLICKED(NUMBER1, &CTESTDlg::OnClickedNumber1)
        ON_BN_CLICKED(NUMBER2, &CTESTDlg::OnClickedNumber2)
        ON_BN_CLICKED(NUMBER3, &CTESTDlg::OnClickedNumber3)
        ON_BN_CLICKED(NUMBER4, &CTESTDlg::OnClickedNumber4)
        ON_BN_CLICKED(NUMBER5, &CTESTDlg::OnClickedNumber5)
    //    ON_NOTIFY(BCN_DROPDOWN, NUMBER5, &CTESTDlg::OnDropdownNumber5)
    ON_BN_CLICKED(NUMBER6, &CTESTDlg::OnClickedNumber6)
    ON_BN_CLICKED(NUMBER7, &CTESTDlg::OnClickedNumber7)
    ON_BN_CLICKED(NUMBER8, &CTESTDlg::OnClickedNumber8)
    ON_BN_CLICKED(SUB, &CTESTDlg::OnClickedSub)
    END_MESSAGE_MAP()
    
    
    // CTESTDlg 消息处理程序
    
    BOOL CTESTDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // 将“关于...”菜单项添加到系统菜单中。
    
        // IDM_ABOUTBOX 必须在系统命令范围内。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);            // 设置大图标
        SetIcon(m_hIcon, FALSE);        // 设置小图标
    
        // TODO:  在此添加额外的初始化代码
    
        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }
    
    void CTESTDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialogEx::OnSysCommand(nID, lParam);
        }
    }
    
    // 如果向对话框添加最小化按钮,则需要下面的代码
    //  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
    //  这将由框架自动完成。
    
    void CTESTDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // 用于绘制的设备上下文
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // 使图标在工作区矩形中居中
            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;
    
            // 绘制图标
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialogEx::OnPaint();
        }
    }
    
    //当用户拖动最小化窗口时系统调用此函数取得光标
    //显示。
    HCURSOR CTESTDlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }
    
    
    
    void CTESTDlg::OnEnChangeEdit1()
    {
        // TODO:  如果该控件是 RICHEDIT 控件,它将不
        // 发送此通知,除非重写 CDialogEx::OnInitDialog()
        // 函数并调用 CRichEditCtrl().SetEventMask(),
        // 同时将 ENM_CHANGE 标志“或”运算到掩码中。
    
        // TODO:  在此添加控件通知处理程序代码
    }
    
    
    
    void CTESTDlg::OnClickedAdd()
    {
    
    
    
    
        Result += "+";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedDiv()
    {
        Result += "/";
        UpdateData(FALSE);
    }
    
    
    
    
    //运算结果处理
    void CTESTDlg::OnClickedEqual()
    {   //接收数据的数组,最大接收10个数
        //接收运算符的数组,最大10个运算符
        float nNum[10] = { 0 };
        char  sign[10] = {};
    
        int i, m, n;
        int Temp_Result = 0;
        for (i = 0, m = 0, n = 0; i < _tcslen(Result); i++)
        {   
            //
            if (Result[i] >= '0'&&Result[i] <= '9')
            {
                nNum[m] = nNum[m] * 10 + (Result[i] - '0');
            }
            if (Result[i] < '0' || Result[i] >'9')
            {
    
                sign[n] = Result[i];
                m++;
                n++;
            }
            Temp_Result = nNum[0];
            int m2 = 0, n2 = 0;
            for (; n2 < n; m2++, n2++)
            {
                switch (sign[n2])
                {
                case '+':
                    Temp_Result += nNum[m2 + 1];
                    break;
                case '-':
                    Temp_Result -= nNum[m2 + 1];
                    break;
                case '*':
                    Temp_Result *= nNum[m2 + 1];
                    break;
                case '/':
                    Temp_Result /= nNum[m2 + 1];
                    break;
                default:
                    break;
                }
            }
        }
        Result.Format(L"%d", Temp_Result);
        UpdateData(FALSE);
    }
    
    
    
    
    
    
    void CTESTDlg::OnClickedClear()
    {
        Result ="";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedMul()
    {
        Result += "*";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedNuber9()
    {
        Result += "9";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedNumber0()
    {
        Result += "0";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedNumber1()
    {
        Result += "1";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedNumber2()
    {
        Result += "2";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedNumber3()
    {
        Result += "3";
        UpdateData(FALSE);
    
    }
    
    
    void CTESTDlg::OnClickedNumber4()
    {
        Result += "4";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedNumber5()
    {
        Result += "5";
        UpdateData(FALSE);
    }
    
    
    //void CTESTDlg::OnDropdownNumber5(NMHDR *pNMHDR, LRESULT *pResult)
    //{
    //    LPNMBCDROPDOWN pDropDown = reinterpret_cast<LPNMBCDROPDOWN>(pNMHDR);
    //    // TODO:  在此添加控件通知处理程序代码
    //    *pResult = 0;
    //}
    
    
    void CTESTDlg::OnClickedNumber6()
    {
        Result += "6";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedNumber7()
    {
        Result += "7";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedNumber8()
    {
        Result += "8";
        UpdateData(FALSE);
    }
    
    
    void CTESTDlg::OnClickedSub()
    {
        Result += "-";
        UpdateData(FALSE);
    }
    让数据变得更安全!
  • 相关阅读:
    2028 ACM Lowest Common Multiple Plus
    2032 杨辉三角
    2011 ACM 0和1思想
    grid
    Change position in observation
    1490 ACM 数学
    1489 ACM 贪心
    2009 ACM 水题
    Book Lending Registration
    MR1和MR2(Yarn)工作原理流程
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5278008.html
Copyright © 2020-2023  润新知