Опубликован: 13.07.2012 | Доступ: свободный | Студентов: 460 / 8 | Оценка: 5.00 / 5.00 | Длительность: 18:06:00
Специальности: Программист
Лекция 2:

Начало работы с Juce. Создание приложений. Главное окно

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Аннотация: В этой лекции вы создадите свою первую программу с использованием 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)
< Лекция 1 || Лекция 2: 12345 || Лекция 3 >