Начало работы с Juce. Создание приложений. Главное окно
Цель лекции: Научиться создавать платформ-независимые и платформ-зависимые проекты Juce, а также управлять внешним видом главного окна приложения
Ключевые термины
Colour — класс, хранящий информацию о цвете;
DocumentWindow — класс, отвечающий за создание окна с изменяемыми размерами и полосой заголовка;
JUCEApplication — класс приложения Juce;
ResizableWindow — базовый класс для перемещаемых окон;
START_JUCE_APPLICATION — макрос, осуществляющий запуск приложений Juce.
Организация рабочего места
"Установка" Juce заключается в том, чтобы поместить папку с откомпилированной библиотекой (папка juce) в каталог, где будут находиться проекты ваших программ. В случае версии 2.0 библиотеки не требуется даже компиляция.
Для каждого нового проекта целесообразно создавать отдельный каталог. Для облегчения работы имеет смысл перенести программы Introjucer и the jucer из каталогов, где они были собраны, в каталог проектов.
Структура программы, использующей библиотеку Juce
Запуск программы, написанной с использованием Juce, осуществляет макрос START_JUCE_APPLICATION, который принимает в качестве аргумента имя класса приложения, наследуемого от базового класса JUCEApplication, и генерирует платформ-зависимую функцию main / WinMain ( пример 2.1):
// TApplication — класс, унаследованный от JUCEApplication #include "TApplication.h" //--------------------------------------------------------------------- // Этот макрос заменяет функцию main START_JUCE_APPLICATION(TApplication) //---------------------------------------------------------------------Листинг 2.1. Файл main.cpp
Класс JUCEApplication содержит чистые виртуальные методы, которые обязательно должны быть переопределены в классе-наследнике. Объект класса, наследуемого от JUCEApplication, ответственен за инициализацию (как правило создание и отображение главного окна) и корректное завершение кода программы. В связи со спецификой дизайна библиотеки в конструкторе и деструкторе класса приложения ничего писать нельзя, поэтому прежде всего должны быть переопределены его методы инициализации и очистки:
- virtual void JUCEApplication::initialise(const String& commandLineParameters);
- virtual void JUCEApplication::shutdown().
Кроме того, переопределяются следующие методы:
- virtual void JUCEApplication::systemRequestedQuit() — вызывается в момент, когда операционная система пытается завершить работу приложения и совершает действия, определённые программистом, которые должна выполнить программа перед закрытием;
- virtual const String JUCEApplication::getApplicationName() — возвращает имя приложения;
- virtual const String JUCEApplication::getApplicationVersion() — возвращает версию приложения;
- virtual bool JUCEApplication::moreThanOneInstanceAllowed() — определяет, возможен ли запуск более чем одного экземпляра приложения.
В листингах 2.2 и 2.3 показан простейший пример класса TApplication, объект которого отображает окно класса TMainForm:
#ifndef _TApplication_h_ #define _TApplication_h_ //--------------------------------------------------------------------- // Автоматически генерируемый файл, содержащий объявления классов Juce #include "../JuceLibraryCode/JuceHeader.h" //--------------------------------------------------------------------- class TMainForm; // Класс главного окна //--------------------------------------------------------------------- class TApplication : public JUCEApplication { public: TApplication(); ~TApplication(); void initialise(const String&); void shutdown(); void systemRequestedQuit(); const String getApplicationName(); const String getApplicationVersion(); bool moreThanOneInstanceAllowed(); private: TMainForm* pMainWindow; // Главное окно приложения }; //--------------------------------------------------------------------- #endifЛистинг 2.2. Объявление класса приложения Juce TApplication (файл TApplication.h)
#include "TApplication.h" #include "TMainForm.h" //--------------------------------------------------------------------- TApplication::TApplication() : pMainWindow(0) { } //--------------------------------------------------------------------- TApplication::~TApplication() { } //--------------------------------------------------------------------- void TApplication::initialise(const String& sCommandLine) { pMainWindow = new TMainForm(); // Создаём главное окно программы } //--------------------------------------------------------------------- void TApplication::shutdown() { if(pMainWindow != 0) delete pMainWindow; } //--------------------------------------------------------------------- void TApplication::systemRequestedQuit() { quit(); // Завершаем работу приложения } //--------------------------------------------------------------------- const String TApplication::getApplicationName() { // Задаём имя приложения // (будет отображаться в заголовке главного окна) return "Juce Window Demo"; } //--------------------------------------------------------------------- const String TApplication::getApplicationVersion() { // Получаем версию приложения из опций проекта return ProjectInfo::versionString; } //--------------------------------------------------------------------- bool TApplication::moreThanOneInstanceAllowed() { // Запрещаем запуск более одного экземпляра приложения return false; } //---------------------------------------------------------------------Листинг 2.3. Реализация класса приложения Juce TApplication (файл TApplication.cpp)