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 | |
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_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;