由MessageBox和AfxMessageBox的使用异同所感

本文探讨了在MFC编程中AfxMessageBox和MessageBox的区别,以及在使用过程中遇到的问题。当在MFC应用中,AfxMessageBox作为全局函数方便使用,而MessageBox需要窗口句柄,常用于CWnd类及其派生类。在出现子对话框层级问题时,通过了解两者差异,解决了提示信息显示位置不当的问题。AfxMessageBox是MFC对Win32 API MessageBox的封装,提供类似功能但使用更加便捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我记得刚开始学图形界面编程的时候,接触的最早的一个函数应该就是MessageBox,之前都一直是控制台程序,突然能运行蹦出一个对话框感觉还是很新鲜的。当时还利用MessageBox写一些恶搞程序,利用上面的yes or no 按钮进行判断等等。但是说实话感觉用处不是特别大,调试的时候可能会用到,所以也就没有深入的研究和学习这个函数。后来转到MFC了,不知怎的吧,就用起了AfxMessageBox,也是没觉得什么,所以也就没多想什么,直到今天,项目中碰到了个问题,才导致我不得不研究一下MessageBox和AfxMessageBox两者的异同点。

那么我遇到的问题是什么呢?我在主对话框中有一个按钮,点击之后能弹出一个非模态的对话框,那么可能在子对话框中就有一些相应的操作要进行,刚开始并没有发觉哪里不妥。大家知道,弹出非模态的对话框,它并不阻塞父窗口,但是焦点却是在子对话框上,也就是当两者有层叠关系时,你点击父窗口的边框,父窗口并不会像我们预期的那样跳到最上面,却仍然是子对话框在最上面。这就比较不爽了,于是我参照了一个前辈的方法,具体见:
实现仿QQ主界面置顶(非模态对话框的显示问题)

如文中所示的方法后,我发现确实不同了,子对话框和父对话框重叠的时候,具有焦点的那个会被放到最上面。此时,我便遇到今天我要说的问题了。我项目中遇到提示信息需要用户注意的基本都是Afxmessagebox来实行。那么当我在子对话框中进行一些操作,弹出提示信息后,我们预期的是这个小的对话框应该出现在子对话框上面,但是让我意想不到的是,它出现在了父对话框的上面,也就是说,此时,父对话框跑到了子对话框之上,而这个弹出的对话框又在其之上。我马上就明白,这绝对是因为窗口句柄的关系,因为我项目中写的基本是AfxMessageBox(“xxxxxxx”,MB_OK)之类的,所以应该再加个句柄就行了,但是加进去不对了,提示调用参数太多了,这才又去查看了万能的百度,这才成为我想写这篇博客的动因。

那么Afx是什么呢?afx其实是微软的一个小组名称,Application Framework技术团

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值