C++的MFC类库中为用户提供了在对话框控件和数据变量间交换数据的
DDX/DDV(数据交换/数据验证)机制,而在此之前,用户只能通过调用
GetDlgItemInt或etDlgItemText等函数这样麻烦的过程来达到同样的目的。
当你要为控制增加DDX/DDV支持时,APP WIZARD和CLASS WIZARD将为你完成
大部分工作。你只需要在CLASS WIZARD中为你的控制ID添加一个数据变量,
然后在程序中适当的地方调用UpdateData函数。
UpdateData接一个BOOL值的参数,为TRUE时将控制中的数据传到变量中,
FAULSE表示把变量中的数据传到控制中。但UpdateData并不直接完成有关
DDX/DDV机制的有关操作,它通过调用一个DoDataExchange函数实现。
DoDataExchange将调用实际完成对话框所要求的所有DDX和DDV操作有关的
DDX和DDV函数。
当你为控制创建一个数据变量时,CLASS WIZARD将自动为你生成三块
代码:它们被用来定义和初始化与控制结合在一起的变量。一旦在应用程
序执行过程中发出了一个DDX或DDV消息,应用程序将使用这三块代码中的
信息来定位,然后执行指定的代码。
1 AFX_DATA代码块
AFX_DATA代码块是CLASS WIZARD用来说明与控制结合在一起的变量
的代码块。在相应的头(*.H)中,它出现在类的说明中。如:
//DIALOG DATA
//{
{AFX_DATA(CAPPDIALOG)
enum{IDD=IDD_DIALOG1};
CButton m_btnCopy;
CString m_editName;
CString m_showName;
//}AFX_DATA
2 AFX_DATA_INIT代码块
AFX_DATA_INIT代码块对与控制结合在一起的变量进行初始化。在
相应的*.CPP文件中,它出现在类的构造函数中。如:
CAPPDIALOG::CAPPDIALOG(CWnd *nParent /*=NULL*/)
:CDialog(CAPPDIALOG::IDD,pParent)
{
//{
{AFX_DATA_INIT(CAPPDIALOG)
m_editName=" ";
m_showName=" ";
//}AFX_DATA_INIT
}
上例中,与m_editName和m_showName变量结合在一起的编辑框将被
初始化为空的文本字符串。你也可以对其修改而轻松的以其他方式对其
进行初始化。
3 AFX_DATA_MAP代码块
AFX数据映像通常出现在DoDataExchange函数中,它是一个CWnd成员
函数,通常会被替换掉。比如在头文件中声明了:
virtual void DoDataExchange(CDataExchange * pDX);
则在CPP文件中如下实现:
void CAPPDIALOG::DoDataExchange(CDataExchange * pDX)
{
CDialog:: DoDataExchange( pDX);
//{
{AFX_DATA_MAP(CAPPDIALOG)
DDX_Control(pDX,IDC_COPY,m_btnCopy):
DDX_Text(pDX,IDC_EDIT_NAME,m_editName);
DDV_MaxChars(pDX,m_editName,28);
DDX_Text(pdx,IDC_SHOW_NAME,m_showName);
//}}AFX_DATA_MAP
}
如例子所示,这个DoDataExchange函数公进行了四次DDX/DDV调用,
它们是由MFC库提供的。参数pDX是一个指向数据交换对象的指针--数据交换
对象是一个属于CDataExchange类的MFC对象。在这里,你可以编写专门的DDX
和DDV函数,来以某种特殊的方式处理数据交换或数据验证。
这三块程序段实现了DDX/DDV机制和应用程序的接口,应用程序循着
UpdateData函数--DoDataExchange函数--DDX/DDV函数的顺序实现了控制和
数据变量的数据交换。今天的文章
VC++的DDX/DDV机制分享到此就结束了,感谢您的阅读。
VC++的DDX/DDV机制
VC++的DDX/DDV机制C 的 MFC 类库中为用户提供了在对话框控件和数据变量间交换数据的 DDX DDV 数据交换 数据验证 机制 而在此之前 用户只能通过调用 GetDlgItemIn 或 etDlgItemTex 等函数这样麻烦的过程来达到同样的目的
pip国内镜像源配置
上一篇
2024-12-10 13:06
自学指南:PLC高效自学,方法都在这里!
下一篇
2024-12-10 13:01
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/82702.html