WindowsAPI每日一練(1) MessageBoxA


WindowsAPI每日一練系列 :https://www.cnblogs.com/LexMoon/category/1246238.html
  WindowsAPI每日一練(1) WinMain

要跟計算機進行交互,就需要計算機顯示信息給人看到,或者發出聲音給人聽到,然后人看到或聽到相應的信息后,再輸入其它信息給計算機,這樣就可以讓計算機進行數據處理,把結果顯示給我們。現在就來編寫一個最簡單的Windows應用程序,讓它提示一行文字給我們看到,這就是簡單的目標。 

 1 #include <windows.h>
 2 
 3 int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance
 4 HINSTANCE hPrevInstance, // handle to previous instance
 5 LPSTR lpCmdLine, // command line
 6 int nCmdShow // show state
 7 ){
 8     HWND hwnd = GetDesktopWindow();
 9     MessageBoxA(hwnd,"第一個例子","這是標題",MB_OK);
10     return 0;
11 }

 下圖為VC++6.0中運行效果

 
MessageBoxA(hwnd,text文本內容,title標題,按鈕類型);

hWnd: 此參數代表消息框擁有的窗口。如果為NULL,則消息框沒有擁有窗口。

按鈕:

按鈕參數
含義
MB_OK
默認值。有一個確認按鈕在里面。
MB_YESNO
有是和否在里面。
MB_ABORTRETRYIGNORE
有Abort(放棄),Retry(重試)和Ignore(跳過)
MB_YESNOCANCEL
消息框含有三個按鈕:Yes,No和Cancel
MB_RETRYCANCEL
有Retry(重試)和Cancel(取消)
MB_OKCANCEL
消息框含有兩個按鈕:OK和Cancel
 1 //按鈕
 2 #define MB_OK 0x00000000L
 3 #define MB_OKCANCEL 0x00000001L
 4 #define MB_ABORTRETRYIGNORE 0x00000002L
 5 #define MB_YESNOCANCEL 0x00000003L
 6 #define MB_YESNO 0x00000004L
 7 #define MB_RETRYCANCEL 0x00000005L
 8 //圖標
 9 #define MB_ICONHAND 0x00000010L
10 #define MB_ICONQUESTION 0x00000020L
11 #define MB_ICONEXCLAMATION 0x00000030L
12 #define MB_ICONASTERISK 0x00000040L
13 #define MB_USERICON 0x00000080L
14 //圖標聲明
15 #define MB_ICONWARNINGMB_ICONEXCLAMATION
16 #define MB_ICONERRORMB_ICONHAND
17 #define MB_ICONINFORMATIONMB_ICONASTERISK
18 #define MB_ICONSTOPMB_ICONHAND
19 //默認按鈕聲明
20 #define MB_DEFBUTTON1 0x00000000L
21 #define MB_DEFBUTTON2 0x00000100L
22 #define MB_DEFBUTTON3 0x00000200L
23 #if(WINVER>=0x0400)
24 #define MB_DEFBUTTON4 0x00000300L//如果支持第四個MessageBox按鈕的話,定義DEFButton4
25 #endif
26 //對話框模型定義
27 #define MB_APPLMODAL 0x00000000L
28 #define MB_SYSTEMMODAL 0x00001000L
29 #define MB_TASKMODAL 0x00002000L
30 #define MB_HELP 0x00004000L//是否擁有幫助按鈕
31 //特殊聲明
32 #define MB_NOFOCUS 0x00008000L
33 #define MB_SETFOREGROUND 0x00010000L
34 #define MB_DEFAULT_DESKTOP_ONLY 0x00020000L
35 #define MB_TOPMOST 0x00040000L
36 #define MB_RIGHT 0x00080000L
37 #define MB_RTLREADING 0x00100000L

圖標:

參數 含義
MB_ICONEXCLAMATION
一個驚嘆號出現在消息框
MB_ICONWARNING
一個驚嘆號出現在消息框
MB_ICONINFORMATION
一個圓圈中小寫字母i組成的圖標出現在消息框
MB_ICONASTERISK
一個圓圈中小寫字母i組成的圖標出現在消息框
MB_ICONQUESTION
一個問題標記圖標出現在消息框
MB_ICONSTOP
一個停止消息圖標出現在消息框
MB_ICONERROR
一個停止消息圖標出現在消息框
MB_ICONHAND
一個停止消息圖標出現在消息框

形態:

參數
含義
MB_APPLMODAL
在hwnd參數標識的窗口中繼續工作以前,用戶一定響應消息框。但是,用戶可以移動到其他線程的窗口且在這些窗口中工作。根據應用程序中窗口的層次機構,用戶則以移動到線程內的其他窗口。所有母 消息框的子窗口自動地失效,但是彈出窗口不是這樣。如果既沒有指定MB_SYSTEMMODAL也沒有指定MB_TASKMOOAL,則MB_APPLMODAL為缺省的。
MB_SYSTEMMODAL
除了消息框有WB_EX_TOPMOST類型,MB_APPLMODAL和MB_SYSTEMMODAL一樣。用系統模態消息框來改變各種各樣的用戶,主要的損壞錯誤需要立即注意(例如,內存溢出)。如果不是那些與hwnd聯系的窗口,此標志對用戶對窗口的相互聯系沒有影響。
MB_TASKMODAL
如果參數hwnd為NULL的話,那么除了所有屬於當前線程高層次的窗口失效外,MB_TASKMODALL和MB_APPLMODAL一樣。當調用應用程序或庫沒有一個可以得到的窗口句柄時,使用此標志。但仍需要阻止輸入到調用線程的其他窗口,而不是擱置其他線程。

其他:

標志
含義
MB_DEFAULT_DESKTOP_ONLY
接收輸入的當前桌面一定是一個缺省桌面。否則,函數調用失敗。缺省桌面是一個在用戶已經紀錄且以后應用程序在此上面運行的桌面。
MB_HELP
把一個Help按鈕增加到消息框。選擇Help按鈕或按F1產生一個Help事件。
MB_RIGHT
文本為右調整
MB_RTLREADING
用在Hebrew和Arabic系統中從右到左的順序顯示消息和大寫文本。
MB_SETFOREGROUND
消息框變為前景窗口。在內部系統為消息個調用SetForegroundWindow函數。
MB_TOPMOST
消息框用WS_EX_TOPMOST窗口類型來創建MB_SERVICE_NOTIFICATION。

返回值:

ID
選擇了……
IDOK(1)
OK
IDCANCEL(2)
CANCEL
IDABORT(3)
ABORT
IDRETRY(4)
RETRY
IDIGNORE(5)
IGNORE
IDYES(6)
YES
IDNO(7)
NO

備注:

通過將 uType 參數設置為相應的標志值,可以在消息框中系統圖標,具體圖標可參見MSDN網站。
圖標
標志位值
 
MB_ICONHAND, MB_ICONSTOP, 或者MB_ICONERROR
 
MB_ICONQUESTION
 
MB_ICONEXCLAMATION 或者 MB_ICONWARNING
 
MB_ICONASTERISK 或者 MB_ICONINFORMATION

 

添加兩個從右到左標記 (RLMs),Unicode 格式字符中用 U+200F表示。在消息框顯示字符串的開頭被由 MessageBox 渲染引擎解釋,以致造成 MessageBox 的閱讀順序,呈現為從右向左 (RTL) 。
當您使用一個系統模式消息框指示時,當系統內存不足時,由 lpText 和 lpCaption 的參數的字符串不應被從資源文件,因為加載資源的嘗試可能會失敗。
如果在一個對話框存在時創建一個消息框,則使用對話框的句柄作為hWnd 參數。hWnd參數不應指定為一個子窗口,就像對話框中的控件一樣。
 1 #include<windows.h>
 2 //切記!當調用<windows.h>時,不要調用MFC!(Afx.h)
 3 int main()
 4 {
 5     int result = MessageBox( NULL , TEXT("這是對話框") , TEXT("你好") , MB_ICONINFORMATION|MB_YESNO);
 6     switch(result)/*注意!使用Unicode應用TEXT包圍字串*/
 7 {
 8     case IDYES:MessageBox(NULL,TEXT("您選擇了YES"),TEXT("YES"),MB_OK);break;
 9     case IDNO:MessageBox(NULL,TEXT("您選擇了NO"),TEXT("NO"),MB_OK);break;
10 }
11 return 0;
12 }

第一步:彈出對話框。語句:

1 int result = MessageBox(NULL,TEXT("這是對話框"),TEXT("你好"),MB_ICONINFORMATION|MB_YESNO);

對話框彈出

選擇是:語句:

1 case IDYES:MessageBox(NULL,TEXT("您選擇了YES"),TEXT("YES"),MB_OK);break;

選擇否:語句:

1 case IDNO:MessageBox(NULL,TEXT("您選擇了NO"),TEXT("NO"),MB_OK);break;

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM