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

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

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >

Метод initialise() вызывается при запуске приложения и, после выполнения действий, определённых пользователем (в нашем случае это создание главного окна), запускает цикл событий приложения (event-dispatch loop), который отслеживает их вплоть до тех пор, пока не будет вызван метод static void JUCEApplication::quit(), который убивает цикл и завершает работу программы.

Как видно из листинга 2.3 , окно программы создаётся динамически, и программист должен сам позаботиться о его уничтожении в методе shutdown().

Как упоминалось выше, метод systemRequestedQuit() вызывается, когда поступает запрос на завершение работы приложения (например, при закрытии главного окна). При этом в методе можно либо определить действия, которые должна выполнить программа до завершения своей работы (вывод сообщений, сохранение документов, настроек и т.п.) с последующим вызовом метода quit(), либо просто ограничиться последним, как в нашем случае ( пример 2.3).

Метод getApplicationName() возвращает строку — имя приложения. Именно эта строка отображается в заголовке главного окна.

Метод getApplicationVersion() возвращает строку, содержащую номер версии приложения, значение которой может быть либо задано вручную ( пример 2.4), либо взято из опций проекта Introjucer (о работе с проектом будет сказано ниже).

const String TApplication::getApplicationVersion()
{
    return "1.0";
}
Листинг 2.4. Определение метода getApplicationVersion (файл TApplication.cpp)

В том случае, если метод moreThanOneInstanceAllowed() возвращает true, при повторном щелчке по значку программы запустится ещё один её экземпляр; в случае, если метод возвращает false, может быть запущен только один экземпляр приложения.

Основным классом Juce для создания окна с изменяемыми размерами, строкой заголовка и кнопками "свернуть окно", "распахнуть окно" и "закрыть окно" является DocumentWindow. Унаследуем от него собственный класс TMainForm ( пример 2.5и пример 2.6).

#ifndef _TMainForm_h_
#define _TMainForm_h_
//---------------------------------------------------------------------
#include "../JuceLibraryCode/JuceHeader.h"
//---------------------------------------------------------------------
class TMainForm : public DocumentWindow
{
public:
    TMainForm();
    ~TMainForm();

    void closeButtonPressed();
};
//---------------------------------------------------------------------
#endif
Листинг 2.5. Объявление класса главного окна приложения TMainForm (файл TMainForm.h)
#include "TMainForm.h"
//---------------------------------------------------------------------
TMainForm::TMainForm() : DocumentWindow(
        JUCEApplication::getInstance()->getApplicationName(),
        Colours::azure,
        DocumentWindow::allButtons)
{
    centreWithSize(400, 200);
    setResizable(true, false);
    setVisible(true);
}
//---------------------------------------------------------------------
TMainForm::~TMainForm()
{
}
//---------------------------------------------------------------------
void TMainForm::closeButtonPressed()
{
    JUCEApplication::getInstance()->systemRequestedQuit();
}
//---------------------------------------------------------------------
Листинг 2.6. Реализация класса главного окна приложения TMainForm (файл TMainForm.cpp)

Конструктор класса DocumentWindow принимает следующие параметры: строку — название приложения, информацию о цвете фона окна, флаги кнопок заголовка окна и булеву переменную добавления на рабочий стол.

В нашем классе (TMainForm пример 2.6) с помощью статического метода static JUCEApplication* JUCEApplication::getInstance() throw() мы получаем ссылку на экземпляр приложения и вызываем метод его getApplicationName(), возвращаующий строку — название программы.

В качестве второго параметра принимается объект класса Colour (передаваемый по ссылке), который определяет цвет, которым будет залит фон окна. Дабы не создавать объект класса Colour, можно воспользоваться набором предопределённых цветов Colours.

Третий параметр конструктора класса DocumentWindow — целочисленная переменная, флаг включения кнопок заголовка окна. Класс DocumentWindow включает перечислимый тип TitleBarButtons, указывающий какие именно кнопки, должны быть включены в строку заголовка окна ( пример 2.7):

enum TitleBarButtons
{
    minimiseButton = 1, 
    maximiseButton = 2, 
    closeButton = 4, 
    allButtons = 7
}
Листинг 2.7. Перечислимый тип TitleBarButtons

Как видно из листинга 2.6 , мы включили в строку заголовка нашего класса окна все кнопки. В том случае, если нам требуется окно неизменяемого размера, мы можем переписать конструктор нашего класса окна следующим образом ( пример 2.8)

#include "TMainForm.h"
//---------------------------------------------------------------------
TMainForm::TMainForm() : DocumentWindow(
        JUCEApplication::getInstance()->getApplicationName(),
        Colours::azure,
        DocumentWindow::minimiseButton | DocumentWindow::closeButton)
{
    centreWithSize(400, 200);
    // Запрещаем изменение размеров окна посредством растягивания мышью
    setResizable(false, false);
    setVisible(true);
}
//---------------------------------------------------------------------
Листинг 2.8. Конструктор класса TMainForm (окно с неизменяемыми размерами)

Внешний вид такого окна представлен на рисунке 2.1 .

Окно с неизменяемыми размерами (в строку заголовка включены кнопки "свернуть окно" и "закрыть окно")

Рис. 2.1. Окно с неизменяемыми размерами (в строку заголовка включены кнопки "свернуть окно" и "закрыть окно")
< Лекция 1 || Лекция 2: 12345 || Лекция 3 >