在之前的示例中,我们主要使用 Alert()
函数来向用户显示简单的提示或错误信息。但如果您希望创建更具交互性、外观更丰富的自定义对话框(例如,包含不同的按钮选项、图标等),或者需要获取用户的明确输入(如“是/否”选择),那么 MessageBox()
函数会是更好的选择。
语法:
int MessageBox(
string text, // 对话框主体要显示的文本内容
string caption, // 对话框窗口的标题栏文本
int flags // 控制对话框外观和行为的标志组合
);
参数:
text
: 您希望在对话框中显示给用户的主要信息。caption
: 显示在对话框窗口标题栏上的文本。flags
: 一个或多个预定义常量的组合,用于指定对话框中显示的按钮类型(如“确定”、“是/否/取消”等)和图标类型(如信息、警告、错误、询问等)。如果未指定任何标志,对话框将默认只显示一个“确定”按钮。多个标志之间需要使用按位或运算符 (|
) 进行组合。
返回值: MessageBox()
函数会返回一个整数,代表用户在对话框中点击了哪个按钮。您可以通过比较这个返回值与预定义的按钮 ID 常量(如 IDYES
, IDNO
, IDOK
, IDCANCEL
等)来判断用户的选择,并据此执行相应的后续操作。
-
示例:创建一个带“是/否”按钮和问号图标的确认对话框
// 假设要询问用户是否要进行一笔交易 int userChoice = MessageBox( "侦测到交易信号,您是否要立即下单?", // text: 对话框内容 "交易确认", // caption: 对话框标题 MB_YESNO | MB_ICONQUESTION // flags: "是/否"按钮 + 问号图标 ); // 根据用户的选择执行操作 if (userChoice == IDYES) // 如果用户点击了 "是 (Yes)" 按钮 { Print("用户确认下单。"); // PlaceOrder(...); // 执行下单逻辑 } else if (userChoice == IDNO) // 如果用户点击了 "否 (No)" 按钮 { Print("用户取消下单。"); } // else { // 可能还有其他返回值,如对话框被关闭等,根据需要处理 }
MB_YESNO
: 指定对话框包含“是”和“否”两个按钮。MB_ICONQUESTION
: 指定在对话框中显示一个问号图标。- 变量
userChoice
会存储用户的选择。如果用户点击“是”,userChoice
的值将等于IDYES
。
MQL4为 MessageBox()
的 flags
参数提供了丰富的预定义常量。以下仅为部分示例,完整的列表和详细说明,请查阅 MQL 官方参考文档中的“标准常量–MessageBox”部分。
- 按钮组合:
MB_OK
,MB_OKCANCEL
,MB_YESNOCANCEL
,MB_RETRYCANCEL
等。 - 图标:
MB_ICONINFORMATION
(或MB_ICONASTERISK
),MB_ICONWARNING
(或MB_ICONEXCLAMATION
),MB_ICONERROR
(或MB_ICONHAND
,MB_ICONSTOP
),MB_ICONQUESTION
。 - 默认按钮:
MB_DEFBUTTON1
,MB_DEFBUTTON2
,MB_DEFBUTTON3
(指定哪个按钮是默认焦点)。 - 模态:
MB_APPLMODAL
(默认,应用程序模态),MB_SYSTEMMODAL
(系统模态,会置顶)。
通过组合这些标志,您可以创建出满足各种交互需求的自定义对话框。
MessageBox()
常用标志常量
MessageBox()
函数的 flags
参数通过组合不同的预定义常量来定制对话框的外观和行为。这些常量可以分为几类:
-
按钮组合标志: 定义对话框中显示的按钮组合。
MB_OKCANCEL
: 显示“确定 (OK)”和“取消 (Cancel)”按钮。MB_YESNO
: 显示“是 (Yes)”和“否 (No)”按钮。MB_YESNOCANCEL
: 显示“是 (Yes)”、“否 (No)”和“取消 (Cancel)”按钮。- (图 8.3 – 使用
MessageBox()
函数创建的弹出对话框示例图示)
-
图标标志: 在对话框的消息文本旁边显示一个图标,以提示消息的性质。
MB_ICONSTOP
(或MB_ICONERROR
,MB_ICONHAND
): 显示一个“停止”标志(通常是红色圆形带叉或手形),表示严重错误。MB_ICONQUESTION
: 显示一个“问号”图标,表示询问。MB_ICONEXCLAMATION
(或MB_ICONWARNING
): 显示一个“感叹号”图标,表示警告信息。MB_ICONINFORMATION
(或MB_ICONASTERISK
): 显示一个“信息”图标(通常是小写字母 “i”),表示提示性信息。
-
返回值标志: 当用户点击对话框中的某个按钮后,
MessageBox()
函数会返回一个整数值,这个值对应以下预定义的“返回标志”常量,表明用户点击了哪个按钮。IDOK
: 用户点击了“确定 (OK)”按钮。IDCANCEL
: 用户点击了“取消 (Cancel)”按钮,或者按下了ESC
键,或者点击了标题栏的关闭按钮(如果对话框有取消功能)。IDYES
: 用户点击了“是 (Yes)”按钮。IDNO
: 用户点击了“否 (No)”按钮。- (还有其他返回值如
IDABORT
,IDRETRY
,IDIGNORE
等,对应于更复杂的按钮组合)。