广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

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

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

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

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

    [MFC控件入门(1)] 响应Button控件的BN通知[TZZ]

    来源:网络收集  点击:  时间:2024-08-16
    【导读】:
    大家好!今天我准备给大家介绍一下“如何为Button控件添加BN通知消息的响应函数”。Button控件支持的BN通知包括BN_CLICKED、BN_DOUBLECLICKED、BN_SETFOCUS和BN_KILLFOCUS通知消息。分别用于响应鼠标单击、鼠标双击、按钮获得焦点和按钮失去焦点的通知。如果你觉得这篇教程有帮助,请为我投上宝贵的一票,谢谢!如果你对我写的系列教程感兴趣,就请 “关注”我吧!工具/原料more已安装Visual Studio 2017(或以上版本);已掌握“ 添加控件变量”;方法/步骤1/23分步阅读

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

    2/23

    打开主对话框资源文件,将对话框中的所有控件删除;

    3/23

    从工具箱中拖一个“Button控件”到对话框中,并修改其大小和位置。然后将其“Caption属性”修改为“响应鼠标左键单击”,并保持其ID不变(默认为IDC_BUTTON1);

    4/23

    打开“类向导窗口”,选择“命令选项卡”,在对象ID列表中选中“IDC_BUTTON1”,然后在消息列表中选择“BN_CLICKED”。选定消息类型后,点击“添加处理程序按钮”为“BN_CLICKED消息”在“CMFCControlDemo1Dlg类”中添加消息处理程序代码(选中哪个类,处理程序代码就会添加到哪个类中)。在弹出的“添加成员函数提示框”中,可以设置响应函数的名称,然后点击“确定按钮”确认添加代码。添加完处理代码后,点击“类向导窗口”中的“确定按钮”关闭向导窗口;

    5/23

    在新添加的响应函数中添加通过MessageBox方法弹出提示消息的代码。然后调试运行程序;

    6/23

    程序启动后,在弹出的对话框窗口中,点击“响应鼠标左键单击”按钮。正常情况下,程序会弹出一个“响应鼠标左键单击事件”的提示框。点击提示框上的“确定”按钮,然后关闭主对话框结束程序运行(注:点击按钮后,按钮会处于聚焦状态);

    7/23

    切换到对话框资源编辑界面,继续从工具栏中拖动一个“Button”控件到对话框中,然后调整其大小和位置并将其“Caption”属性修改为“响应鼠标左键双击”;

    8/23

    通过类向导,为“响应鼠标左键双击”按钮的“BN_DOUBLECLICKED”消息添加处理程序;

    9/23

    向“响应鼠标左键双击”按钮的双击事件处理函数中添加弹出提示框的代码,然后调试运行程序;

    10/23

    程序运行后,在弹出的对话框中,双击“响应鼠标左键双击”按钮。结果,无论怎么点都没有反应。只好关闭对话框退出调试;

    11/23

    通过MSDN查看“BN_DOUBLECLICKED”消息的说明文档。文档中说,只有BS_USERBUTTON(用户按钮风格)、BS_RADIOBUTTON(单选按钮风格)、BS_OWNERDRAW(自绘按钮风格)和BS_NOTIFY(通知风格)的按钮在被双击时才会收到BN_DOUBLECLICKED通知;

    12/23

    继续在文档中查看“BS_NOTIFY”的说明。文档中说,只有具有“BS_NOTIFY”风格的按钮才会发送“BN_KILLFOCUS”和“BN_SETFOCUS”通知给它的父窗口;

    13/23

    回到VS2017的对话框资源编辑界面中,选中“响应鼠标左键双击”按钮,将其“Owner Draw”属性修改为“True”,启用按钮的自绘风格。然后调试运行程序;

    14/23

    程序运行后,双击对话框中“响应鼠标左键单击”按钮的下方。正常情况下,会弹出“鼠标左键双击事件”的提示框。由于“响应鼠标左键双击”按钮具有自绘风格,因此系统就不再绘制其外观了,同时代码中也没有绘制此按钮的外观,这里就显示为空了;

    15/23

    结束程序调试返回到对话框资源编辑界面中,从工具栏中拖动两个按钮到对话框中,然后分别将它们的Caption属性设置为“按钮获得焦点”和“按钮失去焦点”;

    16/23

    通过“类向导”分别为新添加的两个按钮添加“BN_SETFOCUS”消息和“BN_KILLFOCUS”消息的处理程序;

    17/23

    切换到“MFCControlDemo1Dlg.cpp”源文件中,分别为新添加的两个处理函数添加弹出提示框的代码,然后调试运行程序;

    18/23

    程序运行后,来回点击对话框中的“按钮获得焦点”按钮和“按钮失去焦点”按钮或者点击TAB键在按钮之间切换焦点。结果,始终没有弹出获取/失去焦点的消息框;

    19/23

    结束程序调试,回到源代码页面中。在OnInitDialog函数中,通过GetDlgItem方法获得“按钮获得焦点”按钮的对象指针,然后在该指针上调用ModifyStyle方法为该按钮添加“BS_NOTIFY”风格。写完代码后,编译解决方案,确认代码编写正确(注:IDC_BUTTON3是正确的,需要修改并保存一次resource.h文件才会被正确识别);

    20/23

    再次调试运行程序。在弹出的对话框中,点击“按钮获得焦点”按钮,由于它被点击后会获得焦点,因此,会弹出“按钮获得焦点”的提示框。每次点击提示框中的“确定”按钮或者“关闭”按钮时,“按钮获得焦点”会失去焦点。而当提示框关闭后,该按钮又会获得焦点,因此,这个对话框又会弹出。解决这个问题,可以直接通过VS2017停止调试,或者玩命点击提示框中的“关闭”按钮,利用消息响应间隔,点中提示框后面的对话框,让对话框获得焦点,然后关闭对话框结束调试;

    21/23

    回到OnInitDialog函数中,继续添加代码为“IDC_BUTTON4”按钮添加“BS_NOTIFY”风格。然后调试运行程序;

    22/23

    在弹出的对话框中,点击“按钮失去焦点”按钮,然后点击一下主对话框。紧接着会弹出“按钮失去焦点”的提示框;

    23/23

    再次打开“类向导”,选中任意一个按钮ID,在消息列表中还有5个消息。在之后的章节中我再逐个介绍。Enjoy!

    MFC按钮TZZJSTZZLM
    本文关键词:

    版权声明:

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

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

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

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

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号06-28 08:46:20  耗时:0.765