返回信息流用过MFC做对话框程序的都习惯做“数据交换”。
一种机制,可以把对话框的控件中的内容和对话框类的成员变量联系起来。
比如,对话框里有一个文本框CEdit控件,但是要求用户输入数字。这样,传统的方法是:
每次需要这个数字的时候,从文本框里获取内容,然后转换成数字。
void CMyDialog::OnDoSomething() {
CString str;
m_myEditBox.GetWindowText(str);
int a = atoi(str);
a += 7;
str.Format("%d",a);
m_myEditBox.SetWindowText(str);
}
但是,有了数据交换就好多了。
先在DoDataExchange方法里面添加一些东西:
void CDataExchangeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_MY_EDIT_BOX, m_nContentoFmYeDITbOX);
}
然后用UpdateData就可以了。
void CMyDialog::OnDoSomething() {
UpdateData(TRUE);
m_nContentOfMyEditBox += 7;
UpdateData(False);
}
除此之外,这套机制还能进行数据合法性验证。在一个接受数字的输入框中输入字符串,会报错。
如果你用VisualStudio,它还会提供ClassWizard这样的图形化辅助工具来帮你连接。
目前,这样的机制,我只在MFC中看到过。GTK好像没有,但Glade有。wxWidgets肯定没有了。
这是一条镜像帖。来源:北邮人论坛 / cpp / #19764同步于 2009/3/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[MFC考古向]关于Data Exchange and Validation
wks
2009/3/3镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
sdk里面有GetDlgItemInt,直接把文本转换成数字。
让输入框只能输入规定范围的字符,可以用“控件的超类化”。
【 在 wks (cloverprince) 的大作中提到: 】
: 用过MFC做对话框程序的都习惯做“数据交换”。
: 一种机制,可以把对话框的控件中的内容和对话框类的成员变量联系起来。
: 比如,对话框里有一个文本框CEdit控件,但是要求用户输入数字。这样,传统的方法是:
: ...................