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

 时间:2024-10-16 20:18:05

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[MFC控件入门(1)] 响应Button控件的BN通知[TZZ]
  • 麻辣牛蛙火锅的做法
  • 旧物改造:纸盒子制作蔬菜车
  • 详细分析笔记本电池外接电源的优缺点
  • 绿豆汤圆的做法
  • 蔬菜汤的做法
  • 热门搜索
    普法教育手抄报内容 饮食健康手抄报 英语手抄报内容笑话 校园文化手抄报 手抄报数学 手抄报标题设计 小学生诚信手抄报 八十天环游地球手抄报 写规范字手抄报内容 我爱读书手抄报内容