假设你有一个对话框,上面有一个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即可。