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添加类向导窗口”中,将类名设置为“C肛舀辨乔DisplayDlg”,然后点击“完成按钮”完成类创建。随后在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”窗口,双击“录入”按钮为其添加单击事件处理函数。在自动添加的事件处理函数中,调用Up颊俄岿髭dateData(TRUE)获取主界面中的用户信息,然后,构造CDisplayDlg实例并调用其setUserInfo方法将获取到到的用户信息传入到该实例中,最后,调用DoModal方法以模态方式显示CDisplayDlg实例窗口。为了显示CDisplayDlg实例窗口关闭后用户输入的返回消息,在函数的最后通过MessageBox方法显示CDisplayDlg实例的返回消息。代码编写完毕后,调试运行程序;
15、在弹出的程序主对话框中,输入测试信息“root”和“pass”(为了演示,密码是可见的),然后点击“录入按钮”;
16、在弹出的“Dialog1”窗口中,可以见到设置的用户信息。随后,在该窗口中,输入返回结果字符串,然后点击“返回结果”按钮;
17、当“Dialog1”窗口关闭后,会自动弹出之前输入的“返回结果字符串”;