在使用软件的时候呢,经常会遇到很多很多的弹窗,像Photoshop里的提示弹窗、VMware里的报错弹窗等等。我们也可以自己制作弹窗,让自己的代码运行起来更漂亮。
Step1:MessageBox函数的组成
函数原型
int MessageBox(
HWND hWnd,
LPCTSTR lpText,
LPCTSTR lpCaption,
UINT uType
);
参数介绍
- hWnd:此为父窗口的句柄。若设为
NULL
,消息框将不会有所有者窗口。 - lpText:这是要在消息框里显示的文本内容,其类型为字符串。
- lpCaption:即消息框标题栏所显示的文本,同样为字符串类型。
- uType:用于指定消息框的按钮组合、图标样式以及默认按钮等行为,是一个
UINT
类型的参数。
uType 参数的构成
uType
参数是由按钮样式(Buttons)、图标样式(Icons)、默认按钮(Default Button)和其他选项(Options)这几部分通过按位或(|
)组合而成的。
按钮样式(Buttons)
- MB_OK:消息框仅显示一个 “确定” 按钮,这是默认设置。
- MB_OKCANCEL:会显示 “确定” 和 “取消” 两个按钮。
- MB_ABORTRETRYIGNORE:显示 “中止”“重试” 和 “忽略” 三个按钮。
- MB_YESNOCANCEL:有 “是”“否” 和 “取消” 三个按钮可供选择。
- MB_YESNO:只显示 “是” 和 “否” 两个按钮。
- MB_RETRYCANCEL:显示 “重试” 和 “取消” 按钮。
图标样式(Icons)
- MB_ICONINFORMATION:消息框会显示一个带有 “i” 的圆形信息图标。
- MB_ICONWARNING:显示一个黄色三角形感叹号警告图标。
- MB_ICONERROR:展示一个红色圆形叉号错误图标。
- MB_ICONQUESTION:显示一个问号图标,但在现代应用程序中不太推荐使用。
- MB_ICONSTOP:效果等同于
MB_ICONERROR
。 - MB_ICONEXCLAMATION:效果等同于
MB_ICONWARNING
。
默认按钮(Default Button)
- MB_DEFBUTTON1:将第一个按钮设为默认按钮,比如在 “确定”“取消” 组合中,默认的就是 “确定” 按钮。
- MB_DEFBUTTON2:把第二个按钮设为默认按钮。
- MB_DEFBUTTON3:让第三个按钮成为默认按钮。
- MB_DEFBUTTON4:将第四个按钮设为默认按钮。
其他选项(Options)
- MB_APPLMODAL:消息框为应用程序模态,在用户响应之前,用户无法与同一应用程序的其他窗口进行交互。
- MB_SYSTEMMODAL:属于系统模态消息框,会暂停所有应用程序的运行,直到用户对消息框做出响应。
- MB_TASKMODAL:和
MB_APPLMODAL
类似,但当父窗口句柄为NULL
时使用。 - MB_SETFOREGROUND:使消息框成为前台窗口。
- MB_TOPMOST:让消息框始终显示在其他窗口的顶部。
- MB_RIGHT:文本采用右对齐方式。
- MB_RTLREADING:按照从右到左的阅读顺序显示文本。
返回值
消息框的返回值是一个整数,代表用户点击的按钮,具体如下:
- IDOK:用户点击了 “确定” 按钮。
- IDCANCEL:用户点击了 “取消” 按钮。
- IDABORT:用户选择了 “中止”。
- IDRETRY:用户点击了 “重试”。
- IDIGNORE:用户选择了 “忽略”。
- IDYES:用户点击了 “是”。
- IDNO:用户选择了 “否”。
Step2:如何使用MessageBox
前面每一个参数的功能都详细讲解了,这里就举几个简单的例子,其他的都是类似的
注意:MessageBox需要额外引入头文件Windows.h,即使是bits/stdc++.h万能头文件也是如此。
弹窗一:纯文字
MessageBox(NULL,"怎么没有名字注册了啊!","提示",MB_OK);
这段代码其实很简单
- hWnd:这里只有一个弹窗,要么是父对象,要么父子对象都不是,所以为NULL
- lpText:显示的消息
- lpCaption:弹窗标题
- uType:只有一个按钮:确定,无图标
下面有几点需要注意
- 不管有无图标,有无父、子对象,后面的按钮参数都是必填的!
- MessageBox函数的M和B一定要大写!
- 在VS里面如果没有using namespace std; 提示词双引号前面要加上大写的L
-
MessageBox(NULL,L"怎么没有名字注册了啊!",L"提示",MB_OK); // Visual C++
弹窗二:带图标
MessageBox(NULL,"怎么没有名字注册了啊!","提示",MB_OK|MB_ICONERROR); // 错误图标
MessageBox(NULL,"怎么没有名字注册了啊!","提示",MB_OK|MB_ICONEXCLAMATION); // 警告图标
MessageBox(NULL,"怎么没有名字给我注册了啊!","提示",MB_OK|MB_ICONQUESTION); // 询问图标
MessageBox(NULL,"怎么没有名字给我注册了啊!","提示",MB_OK|MB_ICONASTERISK); // 消息图标
弹窗三:返回值
if(MessageBox(NULL,"怎么没有名字注册了啊!","提示",MB_OK|MB_ICONERROR) == IDOK) {
cout << "hhh";
}
这段代码的意思是弹出一个内容为“怎么没有名字注册了啊!”,标题为“提示”,只有一个确定按钮,错误图标,如果按下确定,输出hhh。
好了今天就讲到这,其他的函数也是类似的用法,制作不易,感谢看到这。