广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    [MFC开发经验(3)] 添加控件变量[TZZ]

    来源:网络收集  点击:  时间:2024-08-16
    【导读】:
    大家好!今天我给大家介绍一下MFC中添加控件变量的方法。MFC为我们提供了DDX/DDV机制,其中DDX用于绑定控件成员变量与控件资源ID,让我们可以通过控件成员变量直接管理控件资源ID对应的控件。如果您觉得这篇教程有帮助,请为我投上宝贵的一票,谢谢!如果您对我写的系列教程感兴趣的话,请“关注”我吧!工具/原料more已安装Visual Studio 2017(或以上版本);已读完“ 设计对话框界面”;方法/步骤1/15分步阅读

    启动VS2017,然后新建一个名为“MFCDemo3”的MFC对话框程序项目;

    2/15

    打开对话框资源编辑器,按下“CTRL + A”选中对话框中的所有控件,然后按“Delete键”将它们全部删除;

    3/15

    从工具箱内拖动一个“Edit Control”到对话框的左上角,然后修改其ID为“IDC_INPUTEDT”(当一个对话框上有多个控件时,一定要自定义每个控件的ID,这样可以方便写代码时识别)。修改完属性后,回到对话框中将编辑框的拖宽一些;

    4/15

    通过鼠标右键单击编辑框控件,在弹出菜单中,选择“添加变量”。在弹出的“添加成员变量向导”窗口中,选择控件变量的访问方式为“private”(即类成员的访问方式),勾选“控件变量”(即添加的变量为控件类的对象),变量类型指定为“CEdit”(注意:通过添加变量可以知道每种Windows控件在MFC中对应的MFC控件类。如果在你的项目中重载了某个MFC控件类,这里也可以写上自定义类的类名,这样该控件的所有消息就都会路由到你的自定义控件类中,由你处理了),变量名指定为“_inputEdt”(自定义的控件变量名称,由“m_”开头的变量命名法,我个人已经放弃了!)。所有设置完毕后,点击“完成”按钮,确认添加编辑框控件的控件变量(实际就是向对话框类中添加一个MFC控件类的对象(实例));

    5/15

    为编辑框添加完控件变量后,VS会自动帮我们在“MFCDemo3Dlg.h”中写上“_inputEdt”变量的声明。在“MFCDemo3Dlg.cpp”文件的“DoDataExchange()”函数实现中添加一行绑定控件变量和控件ID的“DDX_Control()”函数调用;

    6/15

    点击VS工具栏上的“本地Windows调试器”,调试运行程序。程序启动后,我们可以见到名为“MFCDemo3”的对话框。点击该对话框上的关闭按钮,结束程序;

    7/15

    切换到“MFCDemo3Dlg.cpp”选项卡页,在“OnInitDialog()”函数实现代码中,通过之前添加的控件变量_inputEdt,将编辑框的内容设置为“Hello Everyone!”(由于VS创建的项目默认采用Unicode字符集,因此,调用CWnd::SetWindowText()方法时,自动变成了CWnd::SetWindowTextW(),其参数必须为Unicode字符串(即由“L字符串”构成的字符串,如:L Hello Everyone!。为了让字符串自适应多字节字符集和Unicode字符集,可以使用tchar.h中定义的_T()宏将字符串包裹起来)),然后调试运行程序。在出现的对话框中,会发现编辑框的内容已经变成了“Hello Everyone!”;

    8/15

    虽然,我们已经成功的通过控件变量_inputEdt设置了编辑框控件的文本内容。但是,编辑框中的内容总是处于全选状态,为什么?其实,这是由于对话框中的自动聚焦功能造成的。由于对话框中只有一个编辑框控件,那么只要程序启动,输入焦点就会自动落到该控件上。而编辑框控件默认获得焦点后,会自动全选文本,因此就形成了这种效果;

    9/15

    退出程序调试状态,然后从工具箱中拖动一个“Button”控件到对话框上并调整其位置。放置好按钮控件后,点击VS菜单栏上的“格式 Tab键顺序”(或“CTRL + D”)。当对话框中的控件显示数字编号后,用鼠标左键点击一下“Button1”将其指定为界面中第一个获得焦点的控件。如果对话框中还有其他控件需要设置Tab顺序的话,你可以继续依次点击它们。Tab顺序设置完毕后,可以用鼠标左键点一个对话框空白处或者按下“CTRL + D”结束Tab顺序设置;

    10/15

    再次调试运行程序,你会发现,对话框的输入焦点已经落到到“Button1”上。编辑框由于没有获得焦点,内容也就没有被全选了。此时,也可以按下“Tab键”,将焦点移动到编辑框控件上,你会发现,当编辑框获得焦点后,其中的文本也会被自动全部选中;

    11/15

    结束程序调试,然后为“Button1”控件添加一个名为“_inputBtn”的控件变量。查看VS自动为我们添加的代码,你会发现其位置与之前编辑框控件一模一样。其实,这就是通过VS添加控件变量的固定模式,适用于所有控件;

    12/15

    如果你仔细观察的话,你会发现第2个“DDX_Control()”函数中的“IDC_BUTTON1”参数下出现了红色的线,表示VS认为这个ID没有定义。果真如此?调试运行程序后,发现程序一切正常;

    13/15

    VS识别不到资源ID的情况会经常发生,当出现这种情况时。只需要双击打开“resource.h”头文件(如果此刻正在设计对话框的话,VS会弹出是否关闭它的提示框,点击是按钮即可),然后在空白行按下回车并保存即可;

    14/15

    继续在“OnInitDialog()”函数中添加设置按钮标题的代码。然后调试运行程序,你会发现按钮控件的标题已经被我们修改成了指定的内容;

    15/15

    如果你希望了解MFC控件类可以对控件进行哪些操作。请自行在“Help Viewer”中搜索MFC控件类的类名,然后查看其帮助内容。Enjoy!

    VS2017MFCTZZJSTZZLM
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.1haoku.cn/art_1127485.html

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-06 14:28:27  耗时:0.027
    0.0269s