MessageBox和AfxMessageBox

2022-10-22

1. MessageBox 是Windows系统库 user32.dll 的一个导出函数,用于显示一个提示消息对话框,其原型定义如下 :
   int MessageBox( HWND hWnd, // handle to owner window 
                   LPCTSTR lpText, // text in message box 
                   LPCTSTR lpCaption, // message box title 
                   UINT uType // message box style ); 
   可以看到有四个参数,第一个是消息框所有者窗口句柄,可以是NULL,第二个是 消息框的文本内容,第三个是消息框标题,第四个参数是消息框样式(按钮和图标)。

2. CWnd类对MessageBox进行了封装,对其第一个参数传递了CWnd类的成员变量 m_hWnd,
   因此,调用CWnd类的成员函数MessageBox时,不能使用第一个参数,并且,最后两个参数也有默认值。
 
3. AfxMessageBox 是应用程序框架函数,是一个全局的函数,其内部实现也是使用了MessageBox。
   它有两次重载,如下:int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );
   int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp = (UINT) -1 ); 
   lpszText 是消息框的内容;nType 与MessageBox中相同;nIDHelp 是帮助上下文ID,如果是0则使用默认的帮助上下文。
   nIDPrompt 是一个资源中的字符串表中的字符串资源ID,可以使用一个字符串资源作为消息框的内容。 
   因为 MessageBox 是标准调用的DLL导出函数,所以可以在C代码中使用,而 AfxMessageBox 则只能在C++代码中使用,一般都是在MFC程序中使用AfxMessageBox。
   AfxMessageBox 内部处理了MessageBox的参数,然后调用 MessageBox来实现。而实际上MessageBox只是一个宏,真正的函数是MessageBoxA和MessageBoxW,
   这两个函数都没有提供控制其出现位置的参数,所以,不能控制其出现的位置。

《MessageBox和AfxMessageBox.doc》

下载本文的Word格式文档,以方便收藏与打印。