保持敬畏之心
交易是一场持久战

MQL4(47):交互对话框 - MessageBox() 函数

在之前的示例中,我们主要使用 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 参数通过组合不同的预定义常量来定制对话框的外观和行为。这些常量可以分为几类:

  1. 按钮组合标志: 定义对话框中显示的按钮组合。

    • MB_OKCANCEL: 显示“确定 (OK)”和“取消 (Cancel)”按钮。
    • MB_YESNO: 显示“是 (Yes)”和“否 (No)”按钮。
    • MB_YESNOCANCEL: 显示“是 (Yes)”、“否 (No)”和“取消 (Cancel)”按钮。
    • (图 8.3 – 使用 MessageBox() 函数创建的弹出对话框示例图示)

  1. 图标标志: 在对话框的消息文本旁边显示一个图标,以提示消息的性质。

    • MB_ICONSTOP (或 MB_ICONERROR, MB_ICONHAND): 显示一个“停止”标志(通常是红色圆形带叉或手形),表示严重错误。
    • MB_ICONQUESTION: 显示一个“问号”图标,表示询问。
    • MB_ICONEXCLAMATION (或 MB_ICONWARNING): 显示一个“感叹号”图标,表示警告信息。
    • MB_ICONINFORMATION (或 MB_ICONASTERISK): 显示一个“信息”图标(通常是小写字母 “i”),表示提示性信息。
  2. 返回值标志: 当用户点击对话框中的某个按钮后,MessageBox() 函数会返回一个整数值,这个值对应以下预定义的“返回标志”常量,表明用户点击了哪个按钮。

    • IDOK: 用户点击了“确定 (OK)”按钮。
    • IDCANCEL: 用户点击了“取消 (Cancel)”按钮,或者按下了 ESC 键,或者点击了标题栏的关闭按钮(如果对话框有取消功能)。
    • IDYES: 用户点击了“是 (Yes)”按钮。
    • IDNO: 用户点击了“否 (No)”按钮。
    • (还有其他返回值如 IDABORT, IDRETRY, IDIGNORE 等,对应于更复杂的按钮组合)。
赞(0)
未经允许不得转载:图道交易 » MQL4(47):交互对话框 - MessageBox() 函数
分享到