[MFC开发经验(4)] 添加控件值变量[TZZ]
1、启动VS2017软件,创建一个名为“MFCDemo4”的MFC对话框程序项目;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/49bf00425d6b04d1d1e8673cb213e8e5edee011a.jpg)
2、项目创建完毕后,切换到资源视图,然后打开对话框资源编辑界面。点击“CTRL + A”全选对话框上的所有控件,然后按“Delete”将它们全部删除;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/3ac71c214f579356f47a0594effb960b3021701a.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/586bfdefe07814316a77cfd8dc6699cf0353621a.jpg)
3、打开“工具栏”面板,然后向对话框中拖入一些控件,比如:Button,Check Box,Edit Control,Radio Button,Static Text等控件(为了对比测试一下添加控件值变量);
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/46a92de039723d03792bc332bb486143d6d4571a.jpg)
4、右键单击对话框上的“Button1控件”,然后在弹出菜单中选择“添加变量”;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/05aae8a75f0f822bb82fe186c018512c8df14d1a.jpg)
5、在弹出的“添加成员变量向导”窗口中,去掉“控件变量”前的勾,然后指定变量类型为“CString”(手动输入),变量名设置为“_btnCaption”(注:也可以根据需要设置访问权限)。设置完毕后,点击“完成按钮”完成成员变量添加;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/cca2552c56ee7b7f5ecf81c16ef4fcf5ef0d411a.jpg)
6、添加控件值成员变量后,可以在MFCDemo4Dlg类的头文件中和源代码文件见到VS为我们增加的代码。点击工具栏中的保存所有文件保存文件修改,文件保存完毕后,文件标签中的星号就会消失;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/0da37be7340f6478f0e2430dfd3e21c2bad6b51a.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/9b2098254193cee85fc5a9af5a0ff2260c9aa81a.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/6bbfdd14f1c595eebc004a9327530688902c9a1a.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/994f412043715fdb3de2448e468920c5270f8c1a.jpg)
7、切换到对话框编辑界面,双击“Button1控件”,添加按钮事件处理函数。在函数代码中,添加修改_btnCaption值并调吹涡皋陕用UpdateData(FALSE)函数将绑定的控件值变量的值传递给界面控件。代码编写完毕后,点击工具栏上的“本地Windows调试器”按钮调试运行程序;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/d400248ca608a50f8e3ead3810cec7f88b77ff1a.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/939c2d40b6f3918729de647424fce186252fef1a.jpg)
8、当程序运行后,点击对话框中的“Button1”按钮,发现竟然毫无反应。代码并没有按照我预算的那样工作。只能关闭对话框,退出调试;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/979906196120a7cd37ac064689b375d7987bdc1a.jpg)
9、返回VS2017编辑模式后,打开“MFCDemo4Dlg.cpp”文件,找到“DoDataExch锾攒揉敫ange函数”,向其中添加一行DDX_Text函数调用代码,将按钮控件的ID与成员变量_btnCaption绑定到一起。添加完代码后,点击“本地Windows调试器”,再次调试运行程序;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/0fb94656d53da824962b3166306651598440cb1a.jpg)
10、程序启动后,发现按钮标题变成了空。点击该按钮后,其标题终于变成了代码设置的文本值。测试完毕后,关闭对话框结束程序调试;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/a31e1214c27bd282e74b5cf23cb1eef97ebd361b.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/7c84d1672b5fd546765445a07fd0b503c9d2241b.jpg)
11、再次打开“MFCDemo4Dlg.cpp”文件,在CMFCDemo4Dlg类的构造函数中,你会发现_btnCaption的初始值被设置成了空值。等你查看CDialog类的源代码后(见徂葛幢捎引用文章),你就会明白,原来在CDialog的DoModal方法中调用了UpdateData(FALSE)函数,将控件值变量更新给了控件;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/3aae2b4f50b8b43e2819aafe7132939c2df7191b.jpg)
12、将_btnCaption的初始值设置为“BUTTON1”,然后再次调试运行程序。在程序对话框中,按钮标题已经变成了“BUTTON1”。点击按钮后,它也如期望的那样变成了之前设置的内容。表明一切正常;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/f59dbe39131fceec5d1b94c179c4ec9958430b1b.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/3852f6e5eceeadbc20edbac4cd18dfdae53b7b1b.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/30601b6104a355e92c6c1563d22ae3efe178681b.jpg)
13、关闭对话框结束程序调试,然后切换到对话框编辑界面。使用鼠标右键单击资源界面中的对话框,在弹出菜单中选择“类向导”,打开类向导窗口;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/def72c6c576699cfbb91d2d7a885e036e3915e1b.jpg)
14、在打开的“类向导”窗口中,切换到“成员变量”选项卡。查看“成员变量列表”,可以见到MFC中支持/已添加控制值成员变量的控件ID和绑定的成员变量及类型;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/46a92de039723d037928c332bb486143d6d4571b.jpg)
15、选中“成员变量”中的“IDC_EDIT1”,然后点击右侧的“添加变量按钮”打开“添加成员变量向导”窗口。在该窗口中,为编辑框控件添加一个类型为CString的成员变量_edtCaption;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/05aae8a75f0f822bb82ce186c018512c8df14d1b.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/57af657f860e7c753f360141650d3aceabd7bf1b.jpg)
16、添加完编辑框控件的值成员变量后,类向导的成员变量列表中会多出一个“控件ID”为“<自定义变量>”的列表项。选中该列表项后,点击“编辑代码按钮”打开源代码文件;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/777f3fc2bbd6e1d0872a67d50d254193cfe8af1b.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/304f0999e92abab8ba82974a4814f1c594eea11b.jpg)
17、查看“CMF觊皱筠桡CDemo4Dlg类”的源文件,发现DoDataChange函数中,照样没有绑定编辑框控件和控制值变量的代码。在我的映像中,瞀闩程狨从VS2005开始,它就一直忘了这件事。所以,绑定控件值变量时,这个地方只能手动添加绑定函数的代码;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/a48bc2e8904800fc713465bad42043715edb931b.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/dccb47de450788012db328f5b18ca608a40f821b.jpg)
18、向DoDataExachange函数中添加绑定IDC_EDIT1和_edtCaption的代码后,再次打开“类向导窗口”,你会发现IDC_EDIT1已经与_edtCaption绑定上了。点击“类向导窗口”中的“确定按钮”关闭类向导;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/8b3643dd884ce54a0de41a5ba3066b0193ddf71b.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/025d87c0affce1860aec55c61f1fbee435daeb1b.jpg)
19、返回“MFCDemo4Dlg.cpp”文件中,在按钮的响应函数中追加设置_edtCaption值的代码。然后调试运行程序;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/979906196120a7cd37ad064689b375d7987bdc1b.jpg)
20、程序启动后,点击对话框中的“BUTTON1”按钮。随后,按钮和编辑框的标题均发生了改变,与代码中设置的值一致;
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/8a17b3042e6817e91822f34cd356d53da924ce1b.jpg)
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/a13bbe10bc33ec386f78e45b295f0c14c37b3c18.jpg)
21、重新打开“类向导”窗口,成员变量列表中还有“IDC_CHECK1”和“IDC_COMBO1”没有绑定成员变量(注:对话框界面中不能绑定成员变量的控件ID是不会显示到这里的)。它们的设置方法与之前介绍的相同,这里就不累述了。Enjoy!
![[MFC开发经验(4)] 添加控件值变量[TZZ]](https://exp-picture.cdn.bcebos.com/32fbcd41037de137a4b5df08f6c5cf672a5f2a18.jpg)