如何操作控件的DDX方法
我最近写了一个程序,需要直接得到编辑框中的浮点数的数值,却发现原来的DDX方法不行,当用户输入未完成时,(比如要输入‘2.0’,已经输入‘2.’时,更新后自动变成了‘2’),于是我想要自行控制控件的DDX方法,我想派生一个新类,去重载DDX方法,不知道该如何处理,请指教? 问题点数:20、回复次数:7Top
1 楼No9(华龙)回复于 2000-06-07 16:13:00 得分 0
为什么我发表了多日,至今还是没人回应,我好伤心呀,好着急呀!
难道是太难吗?高手那么多,这么可能!
难道是分数太少吗?我现在加分求解!
还可能是......Top
2 楼No9(华龙)回复于 2000-06-07 16:22:00 得分 0
噢!我还不知道该如何加分呢?Top
3 楼No9(华龙)回复于 2000-06-17 16:05:00 得分 0
为什么还是没有人回答我呀,我好急呀......Top
4 楼jiangsheng(蒋晟.Net[MVP])回复于 2000-06-17 16:25:00 得分 20
// 必须已经设置好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);
}
}
Top
5 楼No9(华龙)回复于 2000-06-19 16:35:00 得分 0
本人愚钝,直到目前还没有 jiangsheng 的意思,不知道是不是少了一部分文字/代码,再次烦请你解释一下,好吗?
谢谢!Top
6 楼jiangsheng(蒋晟.Net[MVP])回复于 2000-06-20 11:06:00 得分 0
See TN026 in MSDN.Top
7 楼No9(华龙)回复于 2000-06-28 11:17:00 得分 0
谢谢 jiangsheng 的指点,您的意思我明白了!
Top




