- 记录消息
- 警报
- 在图表窗口中显示消息
- 消息对话框
- 声音警报
消息对话框
MQL5 API 提供了 MessageBox 函数,用于以交互方式提示用户确认操作或选择用于处理特定情况的选项。
int MessageBox(const string message, const string caption = NULL, int flags = 0)
该函数打开一个具有给定消息 (message)、标题 (caption) 和设置 (flags) 的无模式对话框。该窗口保持在主终端窗口上面可见,直至用户单击可用按钮之一将其关闭(参见下文)。
该消息同时也以 "Message" 标记显示在“专家”日志中。
如果 caption 参数为 NULL,则 MQL 程序的名称被用作标题。
flags 参数必须包含一个位标志与一个 OR ('|') 运算的组合。支持标志的总集合分为 3 组,分别定义了:
- 对话框中的一组按钮
- 对话框中的图标图像
- 默认选中的活动按钮
下表列出了用于定义对话框按钮的常量和标志值。
常量 |
值 |
说明 |
|---|---|---|
MB_OK |
0x0000 |
1 个“确定”按钮(默认) |
MB_OKCANCEL |
0x0001 |
2 个按钮:“确定”和“取消” |
MB_ABORTRETRYIGNORE |
0x0002 |
3 个按钮:“终止”、“重试”和“忽略” |
MB_YESNOCANCEL |
0x0003 |
3 个按钮:“是”、“否”和“取消” |
MB_YESNO |
0x0004 |
2 个按钮:“是”和“否” |
MB_RETRYCANCEL |
0x0005 |
2 个按钮:“重试”和“取消” |
MB_CANCELTRYCONTINUE |
0x0006 |
3 个按钮:“取消”、“再试一次”和“继续” |
下表列出了可用图像(显示在消息左边)
常量 |
值 |
说明 |
||
|---|---|---|---|---|
MB_ICONSTOP |
0x0010 |
|
||
MB_ICONQUESTION |
0x0020 |
|
||
MB_ICONEXCLAMATION |
0x0030 |
|
||
MB_ICONINFORMATION |
0x0040 |
|
所有图标取决于操作系统版本。你的计算机上显示的示例可能不同。
以下值保留用于选择活动按钮。
常量 |
值 |
说明 |
|---|---|---|
MB_DEFBUTTON1 |
0x0000 |
第一个按钮,即默认按钮(如果未选择任何其它常量) |
MB_DEFBUTTON2 |
0x0100 |
第二个按钮 |
MB_DEFBUTTON3 |
0x0200 |
第三个按钮 |
MB_DEFBUTTON4 |
0x0300 |
第四个按钮 |
你可能会有疑问,如果上面的常量只允许你设置不超过三个按钮,那么这第四个按钮是怎么回事。事实是,在标志当中还有 MB_HELP (0x00004000)。该标志指示在对话框中显示“帮助”按钮。这样,如果有三个主按钮,“帮助”按钮会变成一排中的第四个。然而,与其它按钮不同,单击“帮助”按钮不会关闭对话框。根据 Windows 标准,帮助文件可与程序关联,当按下“帮助”按钮时,应该打开必要的帮助信息。然而,MQL 程序目前不支持这一技术。
该函数根据对话框被关闭的方式(按了哪个按钮)而返回其中一个预定义值。
常量 |
值 |
说明 |
|---|---|---|
IDOK |
1 |
“确定”按钮 |
IDCANCEL |
2 |
“取消”按钮 |
IDABORT |
3 |
“终止”按钮 |
IDRETRY |
4 |
“重试”按钮 |
IDIGNORE |
5 |
“忽略”按钮 |
IDYES |
6 |
“是”按钮 |
IDNO |
7 |
“否”按钮 |
IDTRYAGAIN |
10 |
“再试一次”按钮 |
IDCONTINUE |
11 |
“继续”按钮 |
如果消息框有“取消”按钮,则在用户按 ESC 键时(除了“取消”按钮之外),该函数返回 IDCANCEL。如果消息框没有“取消”按钮,则按 ESC 无效果。
调用 MessageBox 会暂停当前 MQL 程序的执行,直至用户关闭对话框。因此,MessageBox 在 指标中禁止使用,因为指标是在终端的接口线程中执行,等待用户回应将会拖慢图表的更新。
同样,该函数也不能用在 服务中,因为它们与用户界面无关联,而其它类型的 MQL 程序是在图表上下文中执行。
在策略测试程序中运行时,MessageBox 函数没有效果并返回 0。
从函数调用获得结果之后,你可以以你想要的方式处理结果,例如:
int result = MessageBox("Continue?", NULL, MB_YESNOCANCEL);
|
MessageBox 函数可以使用 OutputMessage.mq5 脚本测试,用户可使用输入变量选择对话框的参数,并实际观察其效果。
按钮、图标和默认选定按钮的设置组以及返回代码在特殊枚举中描述:ENUM_MB_BUTTONS、ENUM_MB_ICONS、ENUM_MB_DEFAULT、ENUM_MB_RESULT。这通过下拉列表提供可视化输入,并使用 EnumToString 简化了它们向字符串的转换。
例如,下面是前两个枚举的定义方式。
enum ENUM_MB_BUTTONS
|
其余可以在源代码中找到。
然后它们被用作输入变量类型(元素注释在用户界面中提供更为用户友好的呈现方式)。
input string Message = "Message";
|
该脚本在窗口中显示指定消息以及指定对话框设置。对话框结果显示在日志中。
下图显示了选项选择界面和生成对话框的截屏。

“窗口特性”对话框

“接收到的消息”对话框