=
以前知道這幾個函數有差别,但也沒有去細究,最近隔了很久沒寫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,它們使用起來友善。