Начало работы с 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)