DialogWindow对话框详解

DialogWindow对话框相当于DocumentWindow的“简易版本”,标题栏中只有一个关闭按钮,并且可设置按下ESC键后是否关闭本窗口。除此之外,DocumentWindow的一切属性和行为,本类皆拥有。该类有两个静态函数,可快速显示一个包含给定组件的模态对话框 :showDialog()和showModalDialog(),前者无返回值,后者有返回值。

静态函数ShowModalDialog()的原型详解:

static int DialogWindow:: DialogWindow::showModalDialog (
         const String& dialogTitle,		// 标题
         Component* contentComponent,		// 内容组件
         Component* componentToCentreAround,	// 位于此组件中心
         const Colour& backgroundColour,	// 背景
         bool escapeKeyTriggersCloseButton,	// 是否允许ESC关闭本窗口
         bool shouldBeResizable = false,	// 是否允许调整大小
         bool useBottomRightCornerResizer = false ) // 设置调整本类大小的方式

通常,一些临时弹出的、带有交互功能的、模态性质的窗口可自定义一个对话框类,继承自DialogWindow。在重写的closeButtonPressed()函数中使本类不可视:

void closeButtonPressed() 
{
    // 本类退出模态,不可视。注:此处并未自销毁
    setVisible (false);    
} 

内容组件使用该自定义对话框,通常使其模态运行,并使用JUCE类库的模态宏包裹相关语句(防止安卓平台下出问题,该平台不支持模态窗口)。

另外一种更简单的运行模态对话框的办法是使用DialogWindow::LaunchOptions结构体对象。而且往往在静态函数中临时创建该结构体,示例:

// 静态函数,在对话框中显示MyComp组件
static void showInDialogBox()
{
    // 创建一个DialogWindow::LaunchOptions栈对象
    DialogWindow::LaunchOptions o;

    /* 该结构体对象的public数据成员content为选项作用域指针,setOwned()的作用是:该指针指向一个堆对象,并且负责销毁此对象 */
    o.content.setOwned (new MyComp());

    /* 对话框标题、背景、ESC是否触发关闭、是否使用操作系统的标题栏、是否可调大小 */
    o.dialogTitle                  = "Testing";
    o.dialogBackgroundColour       = Colours::azure;
    o.escapeKeyTriggersCloseButton = true;
    o.useNativeTitleBar            = false;
    o.resizable                    = true;

    // 设置完毕,模态运行之
    o.launchAsync();
}