深入研究MessageBox
(1)MessageBox(NULL,TEXT("世界你好"),TEXT("问好"),MB_OK);
第一个参数暂时不讲;第二个是正文;第三个是标题(Caption);第四个是类型。
MB_OK就是表示有一个OK按钮【确定】)
TEXT是一个宏,当字符串中有中文的时候最好用TEXT来包围这个字符串,虽然不使用TEXT在VC6中没问题,但是在VC7中有问题,而且微软也建议使用TEXT宏,因此在涉及到中文的场合要使用它。他的作用就是把中文转化成不会乱码的格式。(暂时这么认为)。_T("问好"),其实_T只是TEXT的一个缩写而已。而且_T在有的低版本里不识别。TEXT()低版本也识别。暂时不用关心TEXT的细节。
换个样子:
MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),MB_OKCANCEL);
可从设置希望在对话框中显示的按钮:
#define MB_OK 0x00000000L
#define MB_OKCANCEL 0x00000001L
#define MB_ABORTRETRYIGNORE 0x00000002L
#define MB_YESNOCANCEL 0x00000003L
#define MB_YESNO 0x00000004L
#define MB_RETRYCANCEL 0x00000005L
也可以设置对话框中显示的图标:
#define MB_ICONHAND 0x00000010L
#define MB_ICONQUESTION 0x00000020L
#define MB_ICONEXCLAMATION 0x00000030L
#define MB_ICONASTERISK 0x00000040L
比如:MessageBox(NULL, TEXT("世界你好") ,TEXT("你好"), MB_ICONQUESTION);
(2)可是如果我想显示“确定、取消”按钮的时候同时使用问号图标呢?
MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),MB_OKCANCEL| MB_ICONQUESTION);
MessageBox(NULL, TEXT("世界你好"), TEXT("你好"),
MB_ABORTRETRYIGNORE | MB_ICONEXCLAMATION);
(3)思考:
“|”是什么意思?“|”是位运算里的“或”运算,只有对应的两个二进位有一位为1时,结果位才为1 ,否则为0。MB_OK、MB_OKCANCEL等的低四位不同,但是高位永远为0;MB_ICONHAND、MB_ICONQUESTION等的低5至第8位不同,而其他位永远为0。这样“MB_OK、MB_OKCANCEL”组的数值与“MB_ICONHAND、MB_ICONQUESTION”组的数值进行或运算后能分别保留各自的部分,也就是在结果值中同时体现两组的取值。
这种风格叫“掩码”,在Windows编程中这种用法会经常用到。
(4)返回值
MessageBox是有返回值的,返回值为用户点击的按钮:
#define IDOK 1
#define IDCANCEL 2
#define IDABORT 3
#define IDRETRY 4
#define IDIGNORE 5
#define IDYES 6
#define IDNO 7
代码:
int ret = MessageBox(NULL, TEXT("你是人吗?"), TEXT("火星人"),
MB_YESNO | MB_ICONQUESTION);
if(ret==IDYES)
{
MessageBox(NULL, TEXT("火星人你好"), TEXT("问好"),MB_OK);
}
else
{
MessageBox(NULL, TEXT("欢迎回家来"), TEXT("问好"),MB_OK);
}