我记得刚开始学图形界面编程的时候,接触的最早的一个函数应该就是MessageBox,之前都一直是控制台程序,突然能运行蹦出一个对话框感觉还是很新鲜的。当时还利用MessageBox写一些恶搞程序,利用上面的yes or no 按钮进行判断等等。但是说实话感觉用处不是特别大,调试的时候可能会用到,所以也就没有深入的研究和学习这个函数。后来转到MFC了,不知怎的吧,就用起了AfxMessageBox,也是没觉得什么,所以也就没多想什么,直到今天,项目中碰到了个问题,才导致我不得不研究一下MessageBox和AfxMessageBox两者的异同点。
那么我遇到的问题是什么呢?我在主对话框中有一个按钮,点击之后能弹出一个非模态的对话框,那么可能在子对话框中就有一些相应的操作要进行,刚开始并没有发觉哪里不妥。大家知道,弹出非模态的对话框,它并不阻塞父窗口,但是焦点却是在子对话框上,也就是当两者有层叠关系时,你点击父窗口的边框,父窗口并不会像我们预期的那样跳到最上面,却仍然是子对话框在最上面。这就比较不爽了,于是我参照了一个前辈的方法,具体见:
实现仿QQ主界面置顶(非模态对话框的显示问题)
如文中所示的方法后,我发现确实不同了,子对话框和父对话框重叠的时候,具有焦点的那个会被放到最上面。此时,我便遇到今天我要说的问题了。我项目中遇到提示信息需要用户注意的基本都是Afxmessagebox来实行。那么当我在子对话框中进行一些操作,弹出提示信息后,我们预期的是这个小的对话框应该出现在子对话框上面,但是让我意想不到的是,它出现在了父对话框的上面,也就是说,此时,父对话框跑到了子对话框之上,而这个弹出的对话框又在其之上。我马上就明白,这绝对是因为窗口句柄的关系,因为我项目中写的基本是AfxMessageBox(“xxxxxxx”,MB_OK)之类的,所以应该再加个句柄就行了,但是加进去不对了,提示调用参数太多了,这才又去查看了万能的百度,这才成为我想写这篇博客的动因。
那么Afx是什么呢?afx其实是微软的一个小组名称,Application Framework技术团