JUCEApplication(程序主体类)详解

JUCEApplication的对象代表程序本身,该类为抽象基类,派生类实现基类的6个纯虚函数后即成为“程序主体”类(通常还需重写systemRequestedQuit()函数,在该函数中进行必要的检测,比如文档是否已保存等等,可参阅此文) 。

程序主体类与普通的类最显著的区别有三:

 本类无构造参数,初始化代码写在initialise()函数中,清理善后的代码则位于shutdown()函数中,而不是在构造和析构函数中完成。也就是说,程序主体类的构造函数和析构函数均为空。

 通常,本类无需头、源分离,全部代码写在一个cpp源文件中即可。

 程序主体类传给启动宏START_JUCE_APPLICATION(),即可开始运行本程序(进入操作系统的消息循环)。

JUCEApplication继承自ApplicationCommandTarget和JUCEApplicationBase这两个抽象基类,其中ApplicationCommandTarget的虚函数本类全部可用,且本类实现了该基类的4个纯虚函数。

JUCEApplication类的重要方法及解释(网站发表,略)。

如开发命令行程序,或将JUCE嵌入其他类库中,则需使用ScopedJuceInitialiser_GUI类和另外两个全局函数。具体做法及示例:(网站发布,略)。


一个比较典型的程序主体类的完整代码:

#include "../JuceLibraryCode/JuceHeader.h"
#include "MainWindow.h"

class ExercisesApplication  : public JUCEApplication 
{
public:
    ExercisesApplication()    { }
    ~ExercisesApplication()   { }    

    void initialise (const String& )   
    { mainWindow = new MainAppWindow(); }

    void shutdown()     { mainWindow = nullptr; }
    void systemRequestedQuit()   { quit(); }

    const String getApplicationName()     
    { return ProjectInfo::projectName; }

    const String getApplicationVersion() 
    { return ProjectInfo::versionString; }

    bool moreThanOneInstanceAllowed()     { return false; }
    void anotherInstanceStarted (const String&) { }

private:
    ScopedPointer <MainAppWindow> mainWindow;
};

START_JUCE_APPLICATION (ExercisesApplication) // 启动宏