天天看點

MessageBox和AfxMessageBox

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,
   這兩個函數都沒有提供控制其出現位置的參數,是以,不能控制其出現的位置。      

繼續閱讀