对话框控件绑定变量
右键单击控件,添加变量。
复选框:添加变量为控件变量。可以操作控件。
列表框:选择添加变量的控件的ID。
列表框:选择添加的变量的类别,Control为控件控制类型。Value为关联值变量,可以设置数据验证
编辑框:添加的控件变量名。
复选框:不选中,则为控件关联一个变量。不可以操作控件。
列表框:选择关联变量类型。
编辑框:添加的控件变量名。
头文件中添加的变量
// CMFCTestDlg dialog class CMFCTestDlg : public CDialog { // Construction public: CMFCTestDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data enum { IDD = IDD_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: HICON m_hIcon; // Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: CEdit m_Edit; CString m_StrEdit; };
CEdit m_Eidt;CString m_StrEdit; 源文件DoDataExchange函数中添加的关联函数。
void CMFCTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT1, m_Eidt); DDX_TEXT(pDX, IDC_EDIT1, m_StrEdit); }
DDX_Control(pDX, IDC_EDIT1, m_Eidt);DDX_TEXT(pDX, IDC_EDIT1, m_StrEdit); 以上及成功为控件添加变量,绑定变量。也可以自己添加代码实现绑定,但是记得在构造函数中对变量进行初始化。绑定的控件变量,就可以使用该变量对控件进行操作。绑定的变量,就可以使用DDV&DDX函数进行操作。
控件的数据操作DDV & DDX函数操作
通过使用ClassWizard向对话类添加成员变量,你可以利用ClassWizard所提供的高效特征,为对话数据交换和对话数据验证自动生成源代码,也就是人们所熟知的DDX/DDV。
数据交换和验证仅仅应用于为之选定了Value类别的成员变量。也就是CString,BOOL,数字,COleDateTime或COLeCurrency。
对话框数据交换负责数据在控件中的进出。当对话首次出现的时候,每个控件窗口自动用相应的成员变量的值进行初始化。当用户通过单击OK按钮,或通过按Enter键关闭对话的时候,该控件无论是包含哪一个值或文本,都将被复制回该变量。
对话数据验证可以确保值落在规定的限制之内。交换和验证机制都是由MFC框架提供的。每个函数都有一个前缀DDX_或DDV_,来把它作为数据交换或数据验证函数来标识。
1. 对话数据交换(DDX) 常见的对话数据交换函数
(1)交换函数:DDX_CBIndex, 获得/设置的数据类型:int, 应用于控件:Combobox
(2)交换函数:DDX_CBString, 获得/设置的数据类型:Cstring, 应用于控件:Combobox
(3)交换函数:DDX_CBStringExact, 获得/设置的数据类型:Cstring, 应用于控件:Combobox
(4)交换函数:DDX_Check, 获得/设置的数据类型:intCheck, 应用于控件:box
(5)交换函数:DDX_DateTimeCtrl, 获得/设置的数据类型:Ctime, 应用于控件:Datetimepicker
(6)交换函数:DDX_LBIndex, 获得/设置的数据类型:int, 应用于控件:List box
(7)交换函数:DDX_LBString, 获得/设置的数据类型:CString, 应用于控件:Listbox
(8)交换函数:DDX_LBStringExact, 获得/设置的数据类型:CString, 应用于控件:List box
(9)交换函数:DDX_MonthCalCtrl, 获得/设置的数据类型:Ctime, 应用于控件:Month calendar
(10)交换函数:DDX_Radio, 获得/设置的数据类型:int, 应用于控件:Radio button
(11)交换函数:DDX_Scroll, 获得/设置的数据类型:int, 应用于控件:Scroll bar
(12)交换函数:DDX_Text, 获得/设置的数据类型:CString or numerical(BYTE,short,int,UINT,long,etc.),应用于控件:Edit control
在所有的数据交换函数之中,该函数是独一无二的,它只应用于一组控件,而不是一个控件。DDX_Radio返回一个int值用来指示用户打开了组中的哪个按钮:0代表组中的第一个按钮,1代表第二个按钮,以此类推。值-1的意思是小组中的所有按钮都是清除的。你可以调用DDX_Radio来确定单个单选按钮的状态(假如它是组中的唯一一个按钮)。在这种情况下,返回值0的意思是按钮是打开的,值-1意为按钮是关闭的。
建立一个单选按钮通常在对话编辑器中进行,我们一会儿就能看到。
MFC提供了大量的对话数据交换函数,它们可以在对话类中的控件成员变量之间移动数据。除了所列的常见函数之外,还有用于记录集数据和由ActiveX控件返回的数据的特殊交换函数。DDX_Control函数可以为几种不同类型的控件传输数据 ,例如Animate和IPAddress。
2.对话数据验证(DDV)对话数据验证函数,它们仅仅应用于接受用于从键盘输入数据的控件成员变量。换言之,就是编辑控件和组合框。
对话数据验证函数
(1)DDV_MinMaxByte 指定限制范围内的一个BYTE值。
(2)DDV_MinMaxInt 指定限制范围内的一个int值。
(3)DDV_MinMaxUInt 指定限制范围内的一个UNIT值。
(4)DDV_MinMaxLong 指定限制范围内的一个long值。
(5)DDV_MinMaxDWord 指定限制范围内的一个DWORD值。
(6)DDV_MinMaxFloat 指定限制范围内的一个float值。
(7)DDV_MinMaxDouble 指定限制范围内的一个double值。
(8)DDV_MaxCharsCString 字符串的长度不能超过指定的最大长度。
当你为编辑控件或组合框添加成员变量,然后在Member Variable选项卡中的Control IDs框中选择控件的时候,两个提示之一将会出现在该选项卡的底部。究竟出现哪一个提示取决于变量所具有的是数字数据,还是文字数据;在任一种情况下,都要输入用于验证的变量限制值。
除了一个对话数据验证函数之外,所有函数都监视数值数据,以确保由用户输入的值落在指定的上下限之间。
例外是DDV_MaxChars函数,它用来验证键入到编辑控件或组合框中的字符数不超过给定的最大值。与交换函数不同,验证函数仅仅在对话关闭的时候起作用,而不在它刚出现的时候起作用。
转自:http://www.cnblogs.com/weiqubo/archive/2011/07/21/2113136.html
数据的更新与显示
UpdateData(true);
用窗体上控件中的内容来更新和控件相关连的变量的值(只能更新value类型的变量) 例如:你在你的窗体中有一个Edit控件,为这个控件关联了CString类型的变量m_strName; 你在控件中添入内容之后,必须调用UpdateData(true);才能把你添入的内容传给m_strName这个变量。
UpdateData(false);
和上面的正好相反,还是以上面的Edit为例,当你在程序中改变了m_strName变量的内容的时候,如果你想让那个Edit也显示更新后的m_strName,就必须调用UpdateData(false); 这样在你的Edit中才能显示更新完的变量的值!
不绑定控件变量,操作控件。
GetDlgItem(IDC_EDIT1)->GetWindowText(变量);
GetDlgItem(IDC_EDIT1)->SetWindowText(变量);
通过使用MFC封装好的函数,通过控件ID。函数操作依然可以实现操作变量。相对于绑定变量麻烦一些。