在对话框中进行数据交换和数据检查.doc_第1页
在对话框中进行数据交换和数据检查.doc_第2页
在对话框中进行数据交换和数据检查.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5.5 在对话框中进行数据交换和数据检查MFC提供两种方法在对话框中进行数据交换和数据检查(Dialog data exchange/Dialog data validation),数据交换和数据检查的思想是将某一变量和对话框中的一个子窗口进行关联,然后通过调用BOOL UpdateData( BOOL bSaveAndValidate = TRUE )来指示MFC将变量中数据放入子窗口还是将子窗口中数据取到变量中并进行合法性检查。在进行数据交换时一个子窗口可以和两种类型的变量相关联,一种是控件(Control)对象,比如说按钮子窗口可以和一个CButton对象相关联,这种情况下你可以通过该对象直接控制子窗口,而不需要象上节中讲的一样使用GetDlgItem(IDC_CONTROL_ID)来得到窗口指针;一种是内容对象,比如说输入框可以和一个CString对象关联,也可以和一个UINT类型变量关联,这种情况下你可以直接设置/获取窗口中的输入内容。而数据检查是在一个子窗口和一个内容对象相关联时在存取内容时对内容进行合法性检查,比如说当一个输入框和一个CString对象关联时,你可以设置检查CString的对象的最长/最小长度,当输入框和一个UINT变量相关联时你可以设置检查UINT变量的最大/最小值。在BOOL UpdateData( BOOL bSaveAndValidate = TRUE )被调用后,合法性检查会自动进行,如果无法通过检查MFC会弹出消息框进行提示,并返回FALSE。设置DDX/DDV在VC中非常简单,ClassWizard可以替你完成所有的工作,你只需要打开ClassWizard并选中Member Variables页,如图,你可以看到所有可以进行关联的子窗口ID列表,双击一个ID会弹出一个添加变量的对话框,如图,填写相关的信息后按下确定按钮就可以了。然后选中你刚才添加的变量在底部的输入框中输入检查条件,如图。下面我们看一个例子,对话框上的子窗口如图设置,各子窗口的ID和关联的变量如下表: ID关联的变量作用IDC_CHECK_TESTBOOL m_fCheck检查框是否被选中IDC_RADOI_TEST_1int m_iSel当前选择的圆形按钮的索引IDC_COMBO_TESTCString m_szCombo组合框中选中的文本或是输入的文本IDC_EDIT_TESTCString m_szEdit输入框中输入的文本,最大长度为5IDC_LIST_TESTCListBox m_lbTest列表框对象这时候ClassWizard会自动生成变量定义和相关代码,在对话框的构造函数中可以对变量的初始值进行设置,此外在BOOL CDialog:OnInitDialog()中会调用UpdateData(FALSE),即会将变量中的数据放入窗口中 。相关代码如下: /头文件中的变量定义,ClassWizard自动产生/ Dialog Data/AFX_DATA(CMy55_s1Dlg)enum IDD = IDD_MY55_S1_DIALOG ;CListBoxm_lbTest;intm_iSel;CStringm_szEdit;CStringm_szCombo;BOOLm_fCheck;/AFX_DATA/构造函数中赋初值CMy55_s1Dlg:CMy55_s1Dlg(CWnd* pParent /*=NULL*/): CDialog(CMy55_s1Dlg:IDD, pParent)/AFX_DATA_INIT(CMy55_s1Dlg)m_iSel = -1;m_szEdit = _T();m_szCombo = _T();m_fCheck = FALSE;/AFX_DATA_INIT./ClassWizard产生的关联和检查代码void CMy55_s1Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CMy55_s1Dlg)DDX_Control(pDX, IDC_LIST_TEST, m_lbTest);DDX_Radio(pDX, IDC_RADIO_TEST_1, m_iSel);DDX_Text(pDX, IDC_EDIT_TEST, m_szEdit);DDV_MaxChars(pDX, m_szEdit, 5);DDX_CBString(pDX, IDC_COMBO_TEST, m_szCombo);DDX_Check(pDX, IDC_CHECK_TEST, m_fCheck);/AFX_DATA_MAP/在OnInitDialog中利用已经关联过的变量m_lbTestBOOL CMy55_s1Dlg:OnInitDialog()CDialog:OnInitDialog();./ TODO: Add extra initialization here/设置列表框中数据m_lbTest.AddString(String 1);m_lbTest.AddString(String 2);m_lbTest.AddString(String 3);m_lbTest.AddString(String 4);return TRUE; / return TRUE unless you set the focus to a control/对两个按钮消息处理/通过UpdateData(TRUE)得到窗口中数据void CMy55_s1Dlg:OnGet() if(UpdateData(TRUE)/数据合法性检查通过,可以使用变量中存放的数据CString szOut;szOut.Format(radio =%d ncheck is %dnedit input is %sncomboBox input is %sn,m_iSel,m_fCheck,m_szEdit,m_szCombo);AfxMessageBox(szOut);/else 未通过检查/通过UpdateData(FALSE)将数据放入窗口void CMy55_s1Dlg:OnPut() m_szEdit=onPut

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论