MessageBox、::MessageBox 、AfxMessageBox三者的区别 .

摘要:
MessageBox、::MessageBox和AfxMessageBox之间的区别以前就已经知道了,但没有仔细研究过。最近,VC程序已经很久没有编写了。因此,在使用MESSAGEBOX时出现了一个错误,这仍然令人困惑。所以我在互联网上搜索信息,以了解这三种功能之间的差异,所以我写了这篇文章。三者之间的本质区别如下:WindowsAPI:MessageBox();CWnd::MessageBox();MFC:AfxMessageBox();CWnd::MessageBox()和AfxMessageBox。3) AfxMessageBox()mfc中的全局函数,没有句柄HWND参数。

MessageBox、::MessageBox 、AfxMessageBox三者的区别

以前知道这几个函数有差别,但也没有去细究,最近隔了很久没写VC程序了,结果写到使用MESSAGEBOX时出错了,还为之费解,于是上网找了一下资料,清楚了这三个函数的区别,所以写此文章(参考了大量其他人的所写的资料)。使自己能长记性,同时也希望对一些不甚了解的人有所帮助。

三者的本质区别如下:

Windows API: MessageBox();

CWnd::MessageBox();

MFC: AfxMessageBox();

其中CWnd::MessageBox() 与 AfxMessageBox()都是对 API 函数MessageBox()的封装。

关于是否需要句柄HWND的说明:

1)MessageBox是API,因此它需要HWND参数指定其所属窗体。

2)CWnd::MessageBox() 是CWnd的成员函数,它要求MessageBox只能在cwnd类及其子类中使用;它不要求HWND参数,因为CWnd已经指明了其所属窗口。 因此CWnd::MessageBox()和::MessageBox(HWND)作用等同。

3)AfxMessageBox()mfc中的全局函数,无句柄HWND参数。能用MessageBox()的地方都能用AfxMessageBox(),但AfxMessageBox不能设置消息框标题(它的默认标题就是应用程序的可执行文件名).

使用建议:

1)在非CWnd类中使用则是API MessageBox函数,但它使用起来非常不便,必须指定标题、句柄和样式等,否则选用CWnd::MessageBox()或AfxMessageBox,它们使用起来方便。

2)MessageBox是模态对话框,你不进行确认时程序不往下运行,它会阻塞你当前的线程为,除非你程序是多线程的程序,否则只有等待模态对话框被确认。
3)如果用MFC的话,请尽量使用afxmessagebox,因为这个全局的对话框最安全,也最方便。

免责声明:文章转载自《MessageBox、::MessageBox 、AfxMessageBox三者的区别 .》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下解压缩文件命令总结Android中的图片压缩下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

转载:MFC之MessageBox、AfxMessageBox用法

在软件中我们经常会弹出个小窗口,给一点点提示.这就会用到消息对话框. 在Win32 API程序中只有MessageBox这一种用法. 而在MFC中就有三各方法: 1.调用API中的MessageBox; 2.调用CWnd的成员函数MessageBox; 3.调用全局函数AfxMessageBox; MFC中MessageBox的用法 一...

让程序在崩溃时体面的退出转

转自 http://blog.csdn.net/starlee/article/details/6630816 让程序在崩溃时体面的退出之SEH  SEH的全称是Structured Exception Handling,是Windows操作系统提供的一种异常处理方式。SEH是属于操作系统的特性,不为特定语言设计,从它的名字就能看出它是一种结构化的异常处理...

tkinter学习(5)messagebox、pack、grid和place方法

1.messagebox信息弹出框 1.1 代码: import tkinter as tk #导出tk模块 import tkinter.messagebox #导出弹出信息框#定义窗口、标题、大小和位置 window =tk.Tk() window.title('my window') window.geometry('800x400+500+0')...

从点击Button到弹出一个MessageBox, 背后发生了什么

思考一个最简单的程序行为:我们的Dialog上有一个Button, 当用户用鼠标点击这个Button时, 我们弹出一个MessageBox。 这个看似简单的行为, 谁能说清楚它是如何运行起来的,背后究竟发生了什么?  下面是我个人尝试的解答: (1)我们的鼠标点击事件到达设备的驱动程序, 驱动程序把消息放入系统硬件输入队列SHIQ(system ha...

VueX中state变化捕捉不到_getters监测不到state的变化

原因 可能有多种原因, 现在我说一下我碰到的一种情况: state种有一个变量叫state,它是一个json对象, 可把我害惨了.因为他这个json长这个样: messageBox:{ friendId1: [ {message1}, {message2}, ... ], friendId2: [ {message1}, {message2},...

win32下的OpenGL绘图环境框架

Win32下OpenGL入门 主要的步骤包括:添加opengl头文件,库文件,键盘鼠标响应,像素格式设置,opengl环境初始化,绘图变量设置,创建窗口,窗口大小改变时响应,绘制场景,源文件 1,新建一个win32项目(注意,不是console程序),在添加过程中,创建一个空的项目,然后,在解决方案资源管理器的源文件树目录下,添加一个cpp文件,文件可以命...