天天看點

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,它們使用起來友善。