C/C++Windows API函数
函数原型(本体)[1]
1//我们一般理解为:
2
3int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
4 //其实它是根据Unicode定义的
5 WINUSERAPI int WINAPI MessageBoxA(
6 HWND hWnd ,
7 LPCSTR lpText,
8 LPCSTR lpCaption,
9 UINT uType);
10 WINUSERAPI int WINAPI MessageBoxW(
11 HWND hWnd ,
12 LPCWSTR lpText,
13 LPCWSTR lpCaption,
14 UINT uType);
15 #ifdef UNICODE
16 #define MessageBox MessageBoxW //如果用的是Unicode,就用MessageBoxW
17 #else
18 #define MessageBox MessageBoxA
19 #endif
参数
hWnd:
消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。
lpText:
消息框的内容。如果用Unicode,则在文本两边添加
1TEXT(//sometext)
lpCaption:
消息框的标题。如果用Unicode,则在文本两边添加
1TEXT(//sometext)
uType:
指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。指定下列标志中的一个来显示消息框中的按钮以及图标。
uType参数
按钮:
按钮参数 |
含义 |
MB_OK |
默认值。有一个确认按钮在里面。 |
MB_YESNO |
有是和否在里面。 |
MB_ABORTRETRYIGNORE |
有Abort(放弃),Retry(重试)和Ignore(跳过) |
MB_YESNOCANCEL |
消息框含有三个按钮:Yes,No和Cancel |
MB_RETRYCANCEL |
有Retry(重试)和Cancel(取消) |
MB_OKCANCEL |
消息框含有两个按钮:OK和Cancel |
附:
1 | #define MB_OK 0x00000000L |
2 | #define MB_OKCANCEL 0x00000001L |
3 | #define MB_ABORTRETRYIGNORE 0x00000002L |
4 | #define MB_YESNOCANCEL 0x00000003L |
5 | #define MB_YESNO 0x00000004L |
6 | #define MB_RETRYCANCEL 0x00000005L |
7 | |
8 | |
9 | #define MB_ICONHAND 0x00000010L |
10 | #define MB_ICONQUESTION 0x00000020L |
11 | #define MB_ICONEXCLAMATION 0x00000030L |
12 | #define MB_ICONASTERISK 0x00000040L |
13 | |
14 | #define MB_USERICON 0x00000080L |
15 | #define MB_ICONWARNING MB_ICONEXCLAMATION |
16 | #define MB_ICONERROR MB_ICONHAND |
17 | #endif |
18 | |
19 | #define MB_ICONINFORMATION MB_ICONASTERISK |
20 | #define MB_ICONSTOP MB_ICONHAND |
21 | |
22 | #define MB_DEFBUTTON1 0x00000000L |
23 | #define MB_DEFBUTTON2 0x00000100L |
24 | #define MB_DEFBUTTON3 0x00000200L |
25 | #if(WINVER >= 0x0400) |
26 | #define MB_DEFBUTTON4 0x00000300L |
27 | #endif /* WINVER >= 0x0400 */ |
28 | |
29 | #define MB_APPLMODAL 0x00000000L |
30 | #define MB_SYSTEMMODAL 0x00001000L |
31 | #define MB_TASKMODAL 0x00002000L |
32 | #define MB_HELP 0x00004000L // Help Button |
33 | #endif /* WINVER >= 0x0400 */ |
34 | |
35 | #define MB_NOFOCUS 0x00008000L |
36 | #define MB_SETFOREGROUND 0x00010000L |
37 | #define MB_DEFAULT_DESKTOP_ONLY 0x00020000L |
38 | |
39 | #define MB_TOPMOST 0x00040000L |
40 | #define MB_RIGHT 0x00080000L |
41 | #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_TOPMOSI |
消息框用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 | intmain() |
4 | { |
5 | intresult = MessageBox(NULL,TEXT("这是对话框"),TEXT("你好"),MB_ICONINFORMATION|MB_YESNO); |
6 | switch(result) /*注意!使用Unicode应用TEXT包围字串*/ |
7 | { |
8 | caseIDYES:MessageBox(NULL,TEXT("您选择了YES"),TEXT("YES"),MB_OK);break; |
9 | caseIDNO:MessageBox(NULL,TEXT("您选择了NO"),TEXT("NO"),MB_OK);break; |
10 | } |
11 | return0; |
12 | } |
第一步:弹出对话框。语句:
1int result = MessageBox(NULL,TEXT("这是对话框"),TEXT("你好"),MB_ICONINFORMATION|MB_YESNO);
选择是:语句:
1case IDYES:MessageBox(NULL,TEXT("您选择了YES"),TEXT("YES"),MB_OK);break;
选择否:语句:
1case IDNO:MessageBox(NULL,TEXT("您选择了NO"),TEXT("NO"),MB_OK);break;
按钮参数 |
含义 |
MB_OK |
默认值。有一个确认按钮在里面。 |
MB_YESNO |
有是和否在里面。 |
MB_ABORTRETRYIGNORE |
有Abort(放弃),Retry(重试)和Ignore(跳过) |
MB_YESNOCANCEL |
消息框含有三个按钮:Yes,No和Cancel |
MB_RETRYCANCEL |
有Retry(重试)和Cancel(取消) |
MB_OKCANCEL |
消息框含有两个按钮:OK和Cancel |
1 | #define MB_OK 0x00000000L |
2 | #define MB_OKCANCEL 0x00000001L |
3 | #define MB_ABORTRETRYIGNORE 0x00000002L |
4 | #define MB_YESNOCANCEL 0x00000003L |
5 | #define MB_YESNO 0x00000004L |
6 | #define MB_RETRYCANCEL 0x00000005L |
7 | |
8 | |
9 | #define MB_ICONHAND 0x00000010L |
10 | #define MB_ICONQUESTION 0x00000020L |
11 | #define MB_ICONEXCLAMATION 0x00000030L |
12 | #define MB_ICONASTERISK 0x00000040L |
13 | |
14 | #define MB_USERICON 0x00000080L |
15 | #define MB_ICONWARNING MB_ICONEXCLAMATION |
16 | #define MB_ICONERROR MB_ICONHAND |
17 | #endif |
18 | |
19 | #define MB_ICONINFORMATION MB_ICONASTERISK |
20 | #define MB_ICONSTOP MB_ICONHAND |
21 | |
22 | #define MB_DEFBUTTON1 0x00000000L |
23 | #define MB_DEFBUTTON2 0x00000100L |
24 | #define MB_DEFBUTTON3 0x00000200L |
25 | #if(WINVER >= 0x0400) |
26 | #define MB_DEFBUTTON4 0x00000300L |
27 | #endif /* WINVER >= 0x0400 */ |
28 | |
29 | #define MB_APPLMODAL 0x00000000L |
30 | #define MB_SYSTEMMODAL 0x00001000L |
31 | #define MB_TASKMODAL 0x00002000L |
32 | #define MB_HELP 0x00004000L // Help Button |
33 | #endif /* WINVER >= 0x0400 */ |
34 | |
35 | #define MB_NOFOCUS 0x00008000L |
36 | #define MB_SETFOREGROUND 0x00010000L |
37 | #define MB_DEFAULT_DESKTOP_ONLY 0x00020000L |
38 | |
39 | #define MB_TOPMOST 0x00040000L |
40 | #define MB_RIGHT 0x00080000L |
41 | #define MB_RTLREADING 0x00100000L |