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

来源:互联网 发布:java校验身份证 编辑:程序博客网 时间:2024/05/17 04:54

创建一个对话框工程
设计界面如图
这里写图片描述
设置控件名称对应的控件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()

这里写图片描述

0 0
原创粉丝点击