对UpdateData的总结.doc_第1页
对UpdateData的总结.doc_第2页
对UpdateData的总结.doc_第3页
对UpdateData的总结.doc_第4页
对UpdateData的总结.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

下面是我在学习MFC时,对UpdateData函数的一些研究和总结,希望能给大家一些帮助。UpdateData函数原型为:BOOL UpdateData(BOOL bSaveAndValidate=TRUE);返回值为:操作成功则返回非零。否则返回0.如果bSaveAndValidate为TRUE,则返回值为非零表明数据已经成功地被校验了(从编辑框传到所关联的成员变量)下面是在MSDN中的原话:Nonzero if the operation is successful; otherwise 0. If bSaveAndValidate is TRUE, then a return value of nonzero means that the data is successfully validated参数:bSaveAndValidate如果为TRUE,则从对话框控件中获取数据,如果为FALSE,则把数据传递到控件中去。备注:调用这个成员函数从对话框中获取数据,或者初始化对话框中的控件数据。两个会隐式调用UpdateData的函数:CDialog:OnInitiDialogCDialog:OnOkCDialog:OnCancel:这个函数不会调用UpdatData,写在这里只是为了与OnOk函数做对比CDialog:OnInitiDialog:先给出这个函数的定义:BOOL CDialog:OnInitDialog()/ execute dialog RT_DLGINIT resourceBOOL bDlgInit;if (m_lpDialogInit != NULL)bDlgInit = ExecuteDlgInit(m_lpDialogInit);elsebDlgInit = ExecuteDlgInit(m_lpszTemplateName);if (!bDlgInit)TRACE0(Warning: ExecuteDlgInit failed during dialog init.n);EndDialog(-1);return FALSE;/ transfer data into the dialog from member variablesif (!UpdateData(FALSE)TRACE0(Warning: UpdateData failed during dialog init.n);EndDialog(-1);return FALSE;/ enable/disable help button automaticallyCWnd* pHelpButton = GetDlgItem(ID_HELP);if (pHelpButton != NULL)pHelpButton-ShowWindow(AfxHelpEnabled() ? SW_SHOW : SW_HIDE);return TRUE; / set focus to first one当一个模态对话框在CDialog:OnInitiDialog中被创建的时候框架会自动调用UpdateData(FALSE),把变量的初始值传递到编辑框中显示出来。这个调用发生在对话框可见之前。这就可以解释为什么当我们给对话框控件关联成员变量后,运行时打开对话框后,会在控件中看到默认的数据了。原因有二:一在给控件关联成员变量以后,通常会在类的构造函数中对各个成员变量进行初始化。二在OnInitDialog函数中,会调用UpdateData(FALSE),于是就把在构造函数中初始化的成员变量的值传递到控件中去了而CDialog:OnOk的默认版本会调用UpdateData(TRUE)来接收数据,对于CDialog:OnCancel函数则不会CDialog:OnOk:函数定义如下void CDialog:OnOK()if (!UpdateData(TRUE)TRACE0(UpdateData failed during dialog termination.n);/ the UpdateData routine will set focus to correct itemreturn;EndDialog(IDOK);而CDialog:OnCancel的定义为:void CDialog:OnCancel()EndDialog(IDCANCEL);可以看出,OnOK函数会调用UpdateData(TRUE)向变量中传递数据,然后关闭对话框,而OnCancel函数则不会。例:假如有一个下图所示的对话框:在OK按钮的响应函数中添加如下代码:其中m_num2为编辑框2所关联的变量。运行程序后,在编辑框中输入数字5,则点击OK按钮后,首先关闭对话框(调用CDialog:OnOK();)然后会弹出消息盒:这个例子说明了,CDialog:OnOK()函数会调用UpdateData(TRUE),将控件中的内容传递到所关联的变量中去。我们在CTestDlg:OnCancel()中添加同样的代码void CTestDlg:OnCancel() / TODO: Add extra cleanup hereCDialog:OnCancel();char ch100;AfxMessageBox(itoa(m_num2,ch,10),ch);注意:实际上这里用AfxMessageBox(itoa(m_num2,ch,10);就可以了,用AfxMessageBox(itoa(m_num2,ch,10),ch);完全是多此一举,因为itoa(m_num2,ch,10)的返回值就是ch的值。更简单的一种方法是:CString str;str.Format(%d,m_num2);AfxMessageBox(st

温馨提示

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

评论

0/150

提交评论