[MFC开发经验(3)] 添加控件变量[TZZ]
1、启动VS2017,然后新建一个名为“MFCDemo3”的MFC对话框程序项目;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/3201a8f39187031cbc47ac496a86242fa972ecdf.jpg)
2、打开对话框资源编辑器,按下“CTRL + A”选中对话框中的所有控件,然后按“Delete键”将它们全部删除;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/ff5c88d818196120934a0fdb70f202b374d7dfdf.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/604e9556ad042e68556e525485f85856d43dd1df.jpg)
3、从工具箱内拖动一个“Edit Control”到对话框的左上角,然后修改其ID为“IDC_INPUTEDT”(当一个对话框上有多个控件时,一定要自定义每个控件的ID,这样可以方便写代码时识别)。修改完属性后,回到对话框中将编辑框的拖宽一些;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/50189b40102a04e2712539f72b7aa010bd33c2df.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/d3c39889a146b7b1b07e7c08c77c34b33d4135dc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/ce26355fd5460596d693f7653e03c8d247fe25dc.jpg)
4、通过鼠标右键单击编辑框控件,在弹出菜单中,选择“添加变量”。在弹出的“添加成员变量向导”窗口中,选择控件变量的访问方式为“private”(即类成员的访问方式),勾选“控件变量”(即添加的变量为控件类的对象),变量类型指定为“CEdit”(注意:通过添加变量可以知道每种Windows控件在MFC中对应的MFC控件类。如果在你的项目中重载了某个MFC控件类,这里也可以写上自定义类的类名,这样该控件的所有消息就都会路由到你的自定义控件类中,由你处理了),变量名指定为“_inputEdt”(自定义的控件变量名称,由“m_”开头的变量命名法,我个人已经放弃了!)。所有设置完毕后,点击“完成”按钮,确认添加编辑框控件的控件变量(实际就是向对话框类中添加一个MFC控件类的对象(实例));
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/b57fb6db574afa32ee1b2f4254b2dc19cf2c14dc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/125ed0ecd3d969757843ef2cd243040149fe09dc.jpg)
5、为编辑框添加完控件变量后,VS会自动帮我们在“MFCDemo3Dlg.h”中写上“_inputEdt”变量的声明。在“MFCDemo3Dlg.cpp”文件的“DoDataExchange()”函数实现中添加一行绑定控件变量和控件ID的“DDX_Control()”函数调用;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/9bc92713e8e5ecee3a3bbd9acc704618deda7adc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/4e168d5653bbf820c77c95beba21056105a36edc.jpg)
6、点击VS工具栏上的“本地Windows调试器”,调试运行程序。程序启动后,我们可以见到名为“MFCDemo3”的对话框。点击该对话框上的关闭按钮,结束程序;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/e1390a31dfb6326ce6e19a7a89532f63228560dc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/46a92de039723d03076d3d33bb486143d6d457dc.jpg)
7、切换到“MFCDemo3Dlg.cpp”选项卡页,在“OnInitDialog()”函数实现代码中,通过之前添加的控件变量_inputEdt,将编辑框的内容设置为“Hello Everyone!”(由于VS创建的项目默认采用Unicode字符集,因此,调用CWnd::SetWindowText()方法时,自动变成了CWnd::SetWindowTextW(),其参数必须为Unicode字符串(即由“L字符串”构成的字符串,如:L "Hello Everyone!"。为了让字符串自适应多字节字符集和Unicode字符集,可以使用tchar.h中定义的_T()宏将字符串包裹起来)),然后调试运行程序。在出现的对话框中,会发现编辑框的内容已经变成了“Hello Everyone!”;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/5e4e9c2b74ee1c32839f529907f1d8a727334bdc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/7d34fbf4fcf5ee0ded49a962f96b0ce264e7badc.jpg)
8、虽然,我们已经成功的通过控件变量_inputEdt设置了编辑框控件的文本内容。但是,编辑框中的内容总是处于全选状态,为什么?其实,这是由于对话框中的自动聚焦功能造成的。由于对话框中只有一个编辑框控件,那么只要程序启动,输入焦点就会自动落到该控件上。而编辑框控件默认获得焦点后,会自动全选文本,因此就形成了这种效果;
9、退出程序调试状态,然后从工具箱中拖动一个“Button”控件到对话框上并调整其位置。放置好按钮控件后,点击VS菜单栏上的“格式 > Tab键顺序”(或“CTRL + D”)。当对话框中的控件显示数字编号后,用鼠标左键点击一下“Button1”将其指定为界面中第一个获得焦点的控件。如果对话框中还有其他控件需要设置Tab顺序的话,你可以继续依次点击它们。Tab顺序设置完毕后,可以用鼠标左键点一个对话框空白处或者按下“CTRL + D”结束Tab顺序设置;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/6ca9846186254193266fb3b1df1bd10ff326abdc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/f0848bee41c1b72755d4053d1a2ca5cadde898dc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/3761a73acd8920c52f878b80568a59de440788dc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/c6b994775ddd884cfec22c926cef28066a01f6dc.jpg)
10、再次调试运行程序,你会发现,对话框的输入焦点已经落到到“Button1”上。编辑框由于没有获得焦点,内容也就没有被全选了。此时,也可以按下“Tab键”,将焦点移动到编辑框控件上,你会发现,当编辑框获得焦点后,其中的文本也会被自动全部选中;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/aebdff86242fa872be97bd51bfdaf05e4b23e9dc.jpg)
11、结束程序调试,然后为“Button1”控件添加一个名为“_inputBtn”的控件变量。查看VS自动为我们添加的代码,你会发现其位置与之前编辑框控件一模一样。其实,这就是通过VS添加控件变量的固定模式,适用于所有控件;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/a68c126efbf202b34d5f9ace30f4da5873dadbdc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/0fb94656d53da8249061cf67306651598440cbdc.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/a31e1214c27bd282dd01a2f33cb1eef97ebd36dd.jpg)
12、如果你仔细观察的话,你会发现第2个“DDX_Control()”函数中的“IDC_BUTTON1”参数下出现了红色的线,表示VS认为这个ID没有定义。果真如此?调试运行程序后,发现程序一切正常;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/23fd63c5cf672b5fb9ce06233314f4d0b40327dd.jpg)
13、VS识别不到资源ID的情况会经常发生,当出现这种情况时。只需要双击打开“resource.h”头文件(如果此刻正在设计对话框的话,VS会弹出是否关闭它的提示框,点击是按钮即可),然后在空白行按下回车并保存即可;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/340e4eb8b43ea8db2cc2f987189c2cf7deb216dd.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/d2987775f2c4ec99d5cb07b4c3fe1e425c6b07dd.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/46315818dfdae43ba60e0194c457935652bb74dd.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/586bfdefe0781431703e31d9dc6699cf035362dd.jpg)
14、继续在“OnInitDialog()”函数中添加设置按钮标题的代码。然后调试运行程序,你会发现按钮控件的标题已经被我们修改成了指定的内容;
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/baab208630486143175c4b848febf6a75e0f53dd.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/57af657f860e7c75317cff40650d3aceabd7bfdd.jpg)
15、如果你希望了解MFC控件类可以对控件进行哪些操作。请自行在“Help Viewer”中搜索MFC控件类的类名,然后查看其帮助内容。Enjoy!
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/9b2098254193cee8598c57ae5a0ff2260c9aa8dd.jpg)
![[MFC开发经验(3)] 添加控件变量[TZZ]](https://exp-picture.cdn.bcebos.com/b666b2530688912c5942df5d1b4800fc76f797dd.jpg)