<{配资之家}>mfc ddx_control MFC对话框控件关联技巧:DDX_Control用法解析{配资之家}>
MFC提供两种方法在对话框中进行数据交换和数据检查( data / data ),数据交换和数据检查的思想是将某一变量和对话框中的一个子窗口进行关联,然后通过调用BOOL ( BOOL = TRUE )来指示MFC将变量中数据放入子窗口还是将子窗口中数据取到变量中并进行合法性检查。
在进行数据交换时一个子窗口可以和两种类型的变量相关联,一种是控件()对象,比如说按钮子窗口可以和一个对象相关联,这种情况下你可以通过该对象直接控制子窗口,而不需要象上节中讲的一样使用()来得到窗口指针;一种是内容对象,比如说输入框可以和一个对象关联,也可以和一个UINT类型变量关联,这种情况下你可以直接设置/获取窗口中的输入内容。
而数据检查是在一个子窗口和一个内容对象相关联时在存取内容时对内容进行合法性检查,比如说当一个输入框和一个对象关联时,你可以设置检查的对象的最长/最小长度,当输入框和一个UINT变量相关联时你可以设置检查UINT变量的最大/最小值。在BOOL ( BOOL = TRUE )被调用后,合法性检查会自动进行,如果无法通过检查MFC会弹出消息框进行提示,并返回FALSE。
设置DDX/DDV在VC中非常简单,可以替你完成所有的工作,你只需要打开并选中 页,你可以看到所有可以进行关联的子窗口ID列表,双击一个ID会弹出一个添加变量的对话框,填写相关的信息后按下确定按钮就可以了。然后选中你刚才添加的变量在底部的输入框中输入检查条件。
下面我们看一个例子,对话框上的子窗口设置,各子窗口的ID和关联的变量如下表:
ID 作用
BOOL 检查框是否被选中
int 当前选择的圆形按钮的索引
组合框中选中的文本或是输入文本
输入框中输入的文本,最大长度为5
输入框中输入的文本,最大长度为5
这时候会自动生成变量定义和相关代码,在对话框的构造函数中可以对变量的初始值进行设置,此外在BOOL ::()中会调用(FALSE),即会将变量中的数据放入窗口中 。相关代码如下:
//头文件中的变量定义,自动产生
// Data
//{{()
enum { IDD = };
int ;
BOOL ;
//}}
//构造函数中赋初值
::(CWnd* /*=NULL*/)
: (::IDD, )
//{{()
= -1;
= _T("");
= _T("");
= FALSE;
//}}
.....
//产生的关联和检查代码
void ::(* pDX)
::(pDX);
//{{()
(pDX, , );
(pDX, , );
(pDX, , );
(pDX, , 5);
(pDX, , );
(pDX, , );
//}}

//在中利用已经关联过的变量
BOOL ::()
::();
...
// TODO: Add extra here
//设置列表框中数据
.(" 1");
.(" 2");
.(" 3");
.(" 4");
TRUE; // TRUE you set the focus to a
//对两个按钮消息处理
//通过(TRUE)得到窗口中数据
void ::OnGet()
if((TRUE))

//数据合法性检查通过,可以使用变量中存放的数据
szOut;
szOut.("radio =%d \ is %d\nedit input is %s\ input is %s\n",
,,,);
(szOut);
//else 未通过检查
//通过(FALSE)将数据放入窗口
void ::OnPut()
="onPut test";
="onPut test";
(FALSE);
