计算器图形界面

时间:2021-08-19 11:42:53

第六次作业

Github enter

参考资料:
1、MFC打开文件对话框
2、VS2010/MFC编程入门教程
3、关于计算器响应键盘消息及虚拟键

过程:刚开始不知道要怎么做就就去看了vsMFC编程入门,这是同学推荐我去看的,然后用vs MFC画出计算器的界面。画好界面后就是写按钮的响应事件,响应事件要一个一个的写,下面我们看其中的一个 ,其他的以此类推:


void CcalaulatorDlg::OnBnClickedButton14()
{
    // TODO: 在此添加控件通知处理程序代码
    CString str;
    GetDlgItem(IDC_EDIT1)->GetWindowText(str);
    if (str == "ERROR")    //if......else .... 用来是否已经计算过了 如果有 当你输入的时候,清空原来编辑框上的消息 然后再加上字符
    {
        str = "";   
    }
    else {
        for (int i = 0; i < str.GetLength(); i++)
        {
            if (str[i] == '=')
            {
                str = "";
                break;
            }
        }
    }
    str += '8';
    GetDlgItem(IDC_EDIT1)->SetWindowText(str);
}

大概就是那样了,当我们出发“=”时就直接跳入计算,计算前我们得把原来的代码以类的形式添加到这个工程进来,然后调用它


void CcalaulatorDlg::OnBnClickedButton20()
{
    //等号的时候
    // TODO: 在此添加控件通知处理程序代码
    CString str,a;
    GetDlgItem(IDC_EDIT1)->GetWindowText(str);
    if (str == "ERROR")
    {
        str = "";
    }
    else {
        for (int i = 0; i < str.GetLength(); i++)
        {
            if (str[i] == '=')
            {
                str = "";
                break;
            }
        }
    }
    if (str != "")
    {
        a = str;
        a += '=';
        str = "";   
        CT2CA pszConvertedAnsiString(a);  // 将 TCHAR 转换为 LPCSTR  
        string input(pszConvertedAnsiString); // 从 LPCSTR 构造 string
        queue<string>key;
        Scan KFC;
        Calculator calcu;
        key = KFC.ToStringQueue(input); 
        if (KFC.judge())
        {       
            double s;
            string tmp;
            stringstream ss;
            s = calcu.Calculation(key);
            ss << s;
            ss >> tmp;
            a += tmp.c_str();
        }
        else {
            a = "ERROR";
        }
       GetDlgItem(IDC_EDIT1)->SetWindowText(a);
    }
}

接下来就是批量处理了,我们输入途径要有两种,一种是键盘输入,一种是选择路径;

第一次更新:
选择路径代码如下:


void CcalaulatorDlg::OnBnClickedButton22()
{
    // TODO: 在此添加控件通知处理程序代码
    CString gReadFilePathName;
    CFileDialog fileDlg(true, _T("txt"), _T("*.txt"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("txt Files (*.txt)|*.tx|All File (*.*)|*.*||"), NULL);
    if (fileDlg.DoModal() == IDOK)    //弹出对话框  
    {
        gReadFilePathName = fileDlg.GetPathName();//得到完整的文件名和目录名拓展名  
        GetDlgItem(IDC_EDIT2)->SetWindowText(gReadFilePathName);//将路径显示  
        CString filename = fileDlg.GetFileName();
    }
}

第二次更新
键盘输入弄好啦;

界面如图:
计算器图形界面

最后:界面是有点丑 ,但是后面改一改应该可以好看点 哈哈哈!!!!