理解CDataExchange,编写体面的对话框代码

假设你有一个对话框,上面有一个EditBox,接着你用类向导,为这个EditBox建立了一个double型变量m_dv1。

紧接着,你发现MFC提供的从string到double的转换无法满足你的需要。你的输入是一个带单位的长度,比如:

100mm

而MFC完全不懂“mm“是什么意思。不过好在,你已经有这样两个函数:

   1: CString lengthToString(double);
   2: double stringToLength(const CString&);

为了支持带单位的字符串,我们无法直接使用DDX_Text,让我们自己来写一个DDX_Text_Length:

   1: void DDX_Text_Length( CDataExchange* pDX, int nIDC, double& value )
   2: {
   3:     CString str;
   4:     if (pDX->m_bSaveAndValidate)
   5:     {
   6:         DDX_Text(pDX, nIDC, str);
   7:         value=stringtoLength(str);
   8:  
   9:         if (!_finite(value))
  10:         {
  11:             AfxMessageBox("Please enter a valid float point value");
  12:             pDX->Fail();
  13:         }
  14:     }
  15:     else
  16:     {
  17:         str=toStr(value);
  18:         DDX_Text(pDX, nIDC, str);
  19:     }
  20: }

 

接下来在CXXXDialog::DoDataExchange里面直接用DDX_Text_Length代替DDX_Text即可。

转载于:https://www.cnblogs.com/tactoth/archive/2009/09/23/1572717.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值