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;