多语言展示
当前在线:646今日阅读:183今日分享:45

[MFC开发经验(6)] 对话框之间传递数据[TZZ]

大家好!今天我准备给大家介绍一下“在对话框之间传递数据的入门级方法”。通常基于MFC的对话框程序都有一个主对话框。在这个主对话框的控件(比如:按钮)事件响应函数中,可以创建并显示另一个对话框(通常是模态的)。在这个对话框对象实例化之后显示之前,我们可以通过为该对话框类添加的数据设置方法将数据传递给它。当该对话框被关闭之后,对话框对象析构之前,我们同样可以通过为该对话框类添加的数据获取方法得到其输入数据。如果你觉得这篇教程有帮助,请为我投上宝贵的一票,谢谢!如果你对我写的系列教程感兴趣,就请 “关注”我吧!8[MFC开发经验(2)] 设计对话框界面[TZZ]0[MFC开发经验(4)] 添加控件值变量[TZZ]44Visual Studio 2017安装教程
工具/原料
1

已安装Visual Studio 2017(或以上版本);

2

已掌握“[MFC开发经验(2)] 设计对话框界面[TZZ]”;

3

已掌握“[MFC开发经验(4)] 添加控件值变量[TZZ]”;

方法/步骤
1

启动VS2017软件,创建一个名为“MFCDemo6”的MFC对话框程序项目;

2

在资源视图中,打开主对话框资源,然后删除该对话框上的所有控件(注意:正式开发时,通常需要先“禁用对话框的ESC键功能”);

3

通过工具栏拖放控件,将主对话框设置成一个“用户信息录入界面”;

4

修改界面中各控件的ID,将用户编辑框ID设置为“IDC_EDT_USER”,密码编辑框ID设置为“IDC_EDT_PASSWD”,录入按钮ID设置为“IDC_BTN_RECORD”;

5

通过类向导,分别为用户编辑框添加控件值变量“_userEdt”并将最大字符设置为“50”。为密码编辑框添加控件值变量“_passwdEdt”并将最大字符设置为“50”(在录入字符串时,通常需要限制最大长度,禁止无限长度的字符串);

6

右键单击“资源视图”中的“Dialog目录”,然后在弹出菜单中选择“插入Dialog”,向资源中插入一个新的对话框资源;

7

删掉“IDD_DIALOG1”对话框中的控件,然后拖放控件,将其设计成一个“显示用户信息并获取返回结果字符串的界面”。界面设计完成后,将图示中指定控件的ID设置成目标值;

8

右键单击“Dialog1”资源,在弹出菜单中,选择“添加类”,为该对话框新建一个对话框派生类。可惜,VS2017直接报错,说“在指定位置找不到MFC向导模板”。根据问题提示,你会发现在目标位置根本就没有这个“Simple”目录(目前我的版本是15.5.1,无论是否重新或纯净安装,这个目录仍旧会丢失,VS2017自身的BUG)。所以,如果你的VS2017出现同样的问题,请参考引用文章修复该BUG;;

9

修复VS2017中添加类错误的BUG后,重新为“Dialog1”添加一个对话框类。在弹出的“MFC添加类向导窗口”中,将类名设置为“CDisplayDlg”,然后点击“完成按钮”完成类创建。随后在VS2017项目列表中可以见到新添加的CDisplayDlg类的头文件和源文件。点击工具栏上的“全部保存按钮”保存新所有变更;

10

继续通过“类向导”为“CDisplayDlg类”添加两个成员函数setUserInfo和resultMessage。这两个函数分别用于向CDisplayDlg类对象传入数据,以及从该对象获取数据,以构成CDisplayDlg界面的输入和输出功能;

11

再次通过“类向导”为“CDisplayDlg类”添加3个值类型的成员变量,分别关联CDisplayDlg界面中用户名、密码和返回值控件;

12

打开“DisplayDlg.cpp”文件,在setUserInfo方法中,将传入的用户和密码保存到类成员变量中(由于每次都是在CDisplayDlg实例化之后调用此方法,然后才会调用CDialog::DoModal方法显示对话框,而当CDialog::DoModal方法调用时,它会默认调用CDialog::UpdateData方法将绑定的成员变量值更新到界面控件中)。在resultMessage方法中,直接返回_returnEdt的值;

13

打开资源中的“IDD_DIALOG1”窗口,双击“返回结果”按钮为其添加单击事件处理函数。在自动添加的事件处理函数中,调用UpdateData(TRUE)将界面数据更新到CDisplayDlg的成员变量中,然后调用EndDialog(0)关闭对话框;

14

打开资源中的“IDD_MFCDEMO6_DIALOG”窗口,双击“录入”按钮为其添加单击事件处理函数。在自动添加的事件处理函数中,调用UpdateData(TRUE)获取主界面中的用户信息,然后,构造CDisplayDlg实例并调用其setUserInfo方法将获取到到的用户信息传入到该实例中,最后,调用DoModal方法以模态方式显示CDisplayDlg实例窗口。为了显示CDisplayDlg实例窗口关闭后用户输入的返回消息,在函数的最后通过MessageBox方法显示CDisplayDlg实例的返回消息。代码编写完毕后,调试运行程序;

15

在弹出的程序主对话框中,输入测试信息“root”和“pass”(为了演示,密码是可见的),然后点击“录入按钮”;

16

在弹出的“Dialog1”窗口中,可以见到设置的用户信息。随后,在该窗口中,输入返回结果字符串,然后点击“返回结果”按钮;

17

当“Dialog1”窗口关闭后,会自动弹出之前输入的“返回结果字符串”;

推荐信息