MFC 使用类向导为控件关联变量

创建一个对话框工程
设计界面如图
这里写图片描述
设置控件名称对应的控件ID

操作数1:IDC_FIRSTOPT
组合框 :IDC_SYMBO
操作数2:IDC_SECOPT
结果 :IDC_RET
计算按钮:IDC_CALC

选择运算符组合框控件
在属性框中选择Data选项卡 添加运算符 用分号分隔
这里写图片描述

设置type为 drop list,owner draw 为No。
右键类向导添加成员变量
这里写图片描述

向工程中添加一个实现计算功能的类模版

enum Symbo{PLUS,SUB,MUL,DIV};                                       //定义枚举类型
template<class Type>                                                //定义模版类
class Ccalc
{
public:Type Calc(Type &refFirstOpt, Type &refSecOpt, Symbo Opt)     //定义模版类函数
{
           switch (Opt)
           {
           case PLUS:
               return refFirstOpt + refSecOpt;
               break;
           case SUB:
               return refFirstOpt - refSecOpt;
               break;
           case MUL:
               return refFirstOpt*refSecOpt;
               break;
           case DIV:
               return refFirstOpt / refSecOpt;
               break;
           default:
               break;
           }
}
};

在对话框资源中双击“计算”按钮编写其消息处理过程,输入以下代码

void CMFCStudyDlg::OnBnClickedCalc()
{
    CString szFirstOpt, szSecOpt, szSymbo, szResult;
    m_Symbo.GetWindowText(szSymbo);
    if (!szSymbo.IsEmpty())
    {
        m_FirstOpt.GetWindowText(szFirstOpt);
        m_SecOpt.GetWindowText(szSecOpt);


        double dbFirst = _wtoi(szFirstOpt.GetBuffer(0));
        szFirstOpt.ReleaseBuffer(0);
        double dbSec = _wtoi(szSecOpt.GetBuffer(0));
        szSecOpt.ReleaseBuffer(0);

        Symbo opt;
        if (szSymbo=="+")
        {
            opt = PLUS;
        }
        else if (szSymbo=="-")
        {
            opt = SUB;
        }
        else if (szSymbo="*")
        {
            opt = MUL;
        }
        else
        {
            opt = DIV;
        }
        Ccalc<double>CalcObj;                                   //定义类模版对象
        double dbRet = CalcObj.Calc(dbFirst, dbSec, opt);       //调用Calc方法进行计算
        szResult.Format(_T("%-8.2f"), dbRet);                   //将实数转换为字符串
        m_Result.SetWindowText(szResult);                       //在编辑框中显示结果
        szResult.ReleaseBuffer(0);                              //释放缓冲区
    }
    // TODO:  在此添加控件通知处理程序代码
}

其中

double dbFirst = _wtoi(szFirstOpt.GetBuffer(0));
szFirstOpt.ReleaseBuffer(0);
double dbSec = _wtoi(szSecOpt.GetBuffer(0));

是将字符串转换成实数,然后释放缓冲区。
在多字符集中写atof()中即可,但在 Unicode 字符集中则需改为_wtoi()

这里写图片描述

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/czherui/article/details/46813063
个人分类: C++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

MFC 使用类向导为控件关联变量

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭