1. 程式人生 > >MessageBox 函數

MessageBox 函數

幫助 not 默認 inf 模態 continue efault 圖標 api

函數原型:

int WINAPI MessageBox(
  _In_opt_  HWND hWnd,
  _In_opt_  LPCTSTR lpText,
  _In_opt_  LPCTSTR lpCaption,
  _In_      UINT uType
);

_In_ 說明該參數是輸入的,_opt_ 說明該參數是可選參數

hWnd 為該消息框的父窗口句柄,如果為 NULL,則該消息框沒有父窗口

lpText 為消息框的內容

lpCaption 為消息框的標題

uType 為指定一個決定對話框的內容和行為的位標誌集,此參數可以通過指定下列標誌或標誌的組合,來顯示消息框中的按鈕以及圖標

代碼:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdLine)
{
	MessageBox(NULL, TEXT("Hello World"), TEXT("This is a C program"), MB_OK);
	return 0;
}

按鈕類型:

MB_OK:只顯示“確定”按鈕

技術分享圖片

MB_OKCANCEL:顯示“確定”和“取消”按鈕

技術分享圖片

MB_ABORTRETRYIGNORE:顯示“中止”,“重試”和“忽略”按鈕

技術分享圖片

MB_YESNOCANCEL:顯示“是”,“否”和“取消”按鈕

技術分享圖片

MB_YESNO:顯示“是”和“否”按鈕

技術分享圖片

MB_RETRYCANCEL:顯示“重試”和“取消”按鈕

技術分享圖片

MB_CANCELTRYCONTINUE:顯示“取消”,“重試”和“繼續”按鈕

技術分享圖片

圖標類型:

MB_ICONHAND 為一個停在消息的圖標

MB_ICONERROR 也是一樣的

MB_ICONSTOP 也是一樣的

技術分享圖片

MB_ICONQUESTION 為一個問號的圖標

技術分享圖片

MB_ICONEXCLAMATION 為一個警告的圖標

MB_ICONWARNING 也是一樣的

技術分享圖片

MB_ICONASTERISK 為一個小寫 i 的圖標

MB_ICONINFORMATION 也是一樣的

技術分享圖片

默認按鈕:

MB_DEFBUTTON1 將第一個按鈕設置為默認按鈕

MB_DEFBUTTON2 將第二個按鈕設置為默認按鈕

MB_DEFBUTTON3 將第三個按鈕設置為默認按鈕

MB_DEFBUTTON4 將第四個按鈕設置為默認按鈕

消息框形態:

MB_APPLMODAL:在 hWnd 參數標識的窗口中繼續工作以前,用戶一定響應消息框,但是,用戶可以移動到其他線程的窗口且在這些窗口中工作,根據應用程序中窗口的層次機構,用戶則以移動到線程內的其他窗口,所有母消息框的子窗口自動地失效,但是彈出窗口不是這樣,MB_APPLMODAL 為默認選項

MB_SYSTEMMODAL:除了消息框有 WB_EX_TOPMOST 類型,否則 MB_APPLMODAL 和 MB_SYSTEMMODAL 一樣,用系統模態消息框來改變各種各樣的用戶,主要的損壞錯誤需要立即註意(例如,內存溢出),如果不是那些與 hWnd 聯系的窗口,此標誌對用戶對窗口的相互聯系沒有影響

MB_TASKMODAL:如果參數 hWnd 為 NULL 的話,那麽除了所有屬於當前線程高層次的窗口失效外,MB_TASKMODAL 和 MB_APPLMODAL 一樣,當調用應用程序或庫沒有一個可以得到的窗口句柄時,可以使用此標誌,但仍需要阻止輸入到調用線程的其他窗口,而不是擱置其他線程

其它標誌:

MB_HELP:添加“幫助”按鈕到消息框

技術分享圖片

MB_SETFOREGROUND:將消息框變為前景窗口,在內部系統為消息個調用 SetForegroundWindow 函數

MB_DEFAULT_DESKTOP_ONLY:窗口將顯示在最前面,接收輸入的當前桌面一定是一個默認桌面,否則函數調用失敗

MB_TOPMOST:消息框用 WS_EX_TOPMOST 窗口類型來創建 MB_SERVICE_NOTIFICATION

MB_RIGHT:文本將向右對齊

MB_RTLREADING:用在 Hebrew 和 Arabic 系統中從右到左的順序顯示消息和大寫文本

後話:

uType 中的選項如果使用多個的話,要用“|”運算符

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdLine)
{
	MessageBox(NULL, TEXT("Hello World"), TEXT("This is a C program"), MB_YESNOCANCEL | MB_ICONQUESTION | MB_DEFBUTTON2);
	return 0;
}

運行結果

技術分享圖片

MessageBox 函數