// 必须已经设置好10位的长度限制和number风格
void extern AFXAPI DDX_Text_DWORD(CDataExchange* pDX, UINT nIDC,DWORD& rDWord)
{
CString string,MaxString,ErrMsg; pDX->m_pDlgWnd->GetDlgItem(nIDC)->GetWindowText(string);
while (string.GetLength() > 0) {
if (string.GetAt(0) == '0')
string=string.Right(string.GetLength() - 1);
else
break;
}
if (string.GetLength() > 10) {
string.Format("错误:输入的数字太长!\n长度不能大于%d!",10);
AfxMessageBox(string);
pDX->Fail();
return; // fail
}
if (string.GetLength() == 10) {
MaxString.Format("%u",ULONG_MAX);
if (string > MaxString) {
ErrMsg.Format("错误:输入的数字太大:%s!\n输入的数字不能大于%u!",string,ULONG_MAX);
AfxMessageBox(ErrMsg);
pDX->Fail();
return; // fail
}
}

// call the system's DDX_Text
DDX_Text(pDX,nIDC,rDWord);
}void AFXAPI DDX_DateTimeCtrl(CDataExchange* pDX, UINT nIDC,COleDateTimeSpan& tmspn)
{
HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
CDateTimeCtrl* pWnd = (CDateTimeCtrl*) CWnd::FromHandle(hWndCtrl);
if(!pWnd) return;
COleDateTime tmTemp,tmBase;

if(pDX->m_bSaveAndValidate){
pWnd->GetTime(tmTemp);
tmspn=tmTemp-tmBase;
}
else{
tmTemp=tmspn+tmBase;

if(::IsWindow(pWnd->m_hWnd))
pWnd->SetTime(tmTemp);
}
}