Програмування для haiku os крок за кроком: створення вікна програми

Відео: Створюємо графічний калькулятор на Java

Програмування для Haiku OS крок за кроком: створення вікна програми
Для початку займемося створенням каркаса майбутньої головоломки. Основою ігрового поля в нашій програмі буде вікно, в яке в якості дочірнього ми згодом додамо віджет класу, успадкованого від BView. Як фішок ми використовуємо кнопки, які будуть переміщатися по клітинам (осередкам) ігрового поля, тобто «Внутрішній квадрат» вікна програми буде весь час змінюватися. Однак, оскільки Haiku API не пропонують (на відміну від Qt в Linux) вертикальних і горизонтальних менеджерів компонування, які розраховують розміри дочірніх віджетів при зміні розмірів вікна, то зрозуміло, що в нашій програмі кордону вікна - ігрового поля - повинні бути задані жорстко і не мінятися під час виконання програми.

Створимо каталог для майбутньої програми, яку назвемо просто - Lucas. Відкриємо Pe, в який внесемо текст з лістингу 1:
лістинг 1
#ifndef _ TMainForm _ h _
#define _ TMainForm _ h _
#include
class TMainForm: public BWindow
public:
TMainForm (BRect WindowFrame, const char * psTitle = "Гра", window _ type WindowType = B _ TITLED _ WINDOW, uint32 uiFlags = B _ NOT _ RESIZABLE;
#endif

Отже, ми оголосили клас головного вікна нашої програми TMainForm, успадкувавши його від класу вікна Haiku, BWindow, що підключається директивою #include [Window.h]. До слова, Be Book настійно рекомендує надходити саме так, а не використовувати клас BWinow безпосередньо. У конструкторі класу ми задаємо наступні параметри: розміри вікна, що задаються прямокутником BRect WindowFrame, заголовок вікна, прапори і робочий простір вікна.

Програмування для Haiku OS крок за кроком: створення вікна програми
вікно KEYMAP

Зверніть увагу, що, хоча Haiku OS в повному обсязі локалізована, оскільки використовувана системна локаль - cp1251, проблем з виведенням російського тексту немає. Перемикання між мовами введення (російська, англійська) досягається зміною розкладки клавіатури у вікні налаштувань Keymap (викликається з меню «Preferences» в DeskBar - см. Рис. Вище).

Прапорам (uint32 uiFlags) ми присвоїли таке значення:
- B_NOT_RESIZABLE - розміри вікна неможливо буде змінити, потягнувши мишею за правий нижній його угол-
- B_NOT_ZOOMABLE - користувач не зможе змінити розміри вікна, натиснувши кнопку масштабування в правому верхньому куті заголовка вікна.

Власне, цього ми і добивалися. Детальніше про прапори вікна програми ви можете прочитати в Be Book (Розділ Interface Kit - BWindow). Збережемо файл з внесеними змінами в каталозі програми під ім`ям TMainForm.h.

Додамо реалізацію класу. У редакторі Pe створіть новий документ і внесіть в нього текст з лістингу 2:
лістинг 2
#include
#include
#include "TMainForm.h"
TMainForm :: TMainForm (BRect WindowFrame, const char * psTitle,
window _type WindowType, uint32 uiFlags,
uint32 uiWorkspaces)
: BWindow (WindowFrame, psTitle, WindowType, uiFlags, uiWorkspaces)
{}
void TMainForm :: MessageReceived (BMessage * pMessage) {



switch (pMessage-gt; what) {
default:
{
BWindow :: MessageReceived (pMessage);
}
}
}
bool TMainForm :: QuitRequested () {
be _ app-gt; PostMessage (B _ QUIT _ REQUESTED) - return BWindow :: QuitRequested ();
}

Додаток з графічним інтерфейсом користувача в Haiku функціонує так само, як і вікно графічного середовища будь-який інший операційної системи. У своєму головному циклі програма отримує повідомлення (BMessage), що генеруються різними віджетами в залежності від дій користувача. Обробка повідомлень здійснюється віртуальної функцією MessageReceived (BMessage *), яку ми переобумовленої. Поки єдине, що робить функція, - це перехоплення всіх необроблених повідомлень, які не потребують реакції на них вікна.

Зауваження: навіть якщо вікно ніяк не реагує на повідомлення, вони повинні бути перехоплені. Тому виклик функції BWindow :: MessageReceived (BMessage *) - в реалізації методу MessageReceived (BMessage *) вашого класу є обов`язковим.

Наступна віртуальна функція, яку ми переобумовленої, - QuitRequested (). Вона дуже важлива: викликається, коли об`єкт докладання (be_app) отримує повідомлення про завершення роботи (B_QUIT_REQUESTED), і здійснює послідовний виклик функцій BWindow :: QuitRequested () і BWindow :: Quit (). Остання знищує вікно і все його компоненти, включаючи дочірні віджети (саме тому в нашому класі немає деструкції). Якщо функція QuitRequested () не визначена, то закриття вікна клацанням по верхній лівій кнопці в його заголовку не приводить до знищення об`єкта додатка, який зберігається в пам`яті, не дивлячись на те, що програма стає недоступною для користувачів.




Зверніть увагу, що доступ до властивостей об`єкта додатка з методів класу головного вікна здійснюється через глобальну змінну be_app (підключається директивою #include). Збережіть файл під ім`ям TmainForm. cpp. Тепер створимо клас нашого застосування, TProgramme, успадкувавши його від класу BApplication. Оголошення класу наведено в лістингу 3:
лістинг 3
#ifndef _ TProgramme _ h _
#define _ TProgramme _ h _
#include class TMainForm;
class TProgramme: public BApplication {
public:
TProgramme (const char * psSignature =
"Application / x-vnd.linmedsoft-lucas");
private:
TMainForm * pMainWindow;
};
#endif

Кожна програма в Haiku характеризується унікальним строковим ідентифікатором, сигнатурою, який конструктор класу приймає як параметр. Сигнатура формується з наступних частин: слова application (додаток), після якого через слеш йде позначення x-vnd. і назва організації-розробника, і далі через дефіс - назва програми з малої літери.

Як закритого члена класу нашого застосування оголосимо покажчик на раніше створений клас вікна (TMainForm). Реалізація класу додатка приведена в лістингу 4:
лістинг 4
#include "TProgramme.h" #include "TMainForm.h"
TProgramme :: TProgramme (const char * psSignature)
: BApplication (psSignature)
{
pMainWindow = new TMainForm (BRect (100, 100, 665, 185)) - pMainWindow-gt; Show ();
}

Як параметр конструктор класу вікна програми приймає прямокутник BRect, в якому задані, відповідно, ліва, верхня, права і нижня межі віджета. Метод Show () відображає створене вікно на екрані комп`ютера.

І нарешті, реалізація головної функції програми показана в лістингу 5 (збережіть його у файлі main.cpp):
лістинг 5
#include "TProgramme.h"
int main () {
TProgramme MyProgramme- MyProgramme.Run () - return 0;
}

Запуск головного циклу додатки здійснюється методом Run () його класу. Ця функція автоматично виробляє виклик віртуального методу ReadyToRun (), який виконує попередню настройку програми. Тому часто рекомендують здійснювати перевизначення цієї функції і робити виклик функції показу головного вікна саме з неї. Однак ніяких змін в роботі програми це не викликає, так що написання цього додаткового коду я вважаю зайвим.
Залишилося відкомпілювати додаток. Для полегшення роботи напишемо невеликий makefile (див. Лістинг 6):
лістинг 6
OBJ = TMainForm.o TProgramme.o main.o
Lucas: $ (OBJ)
g ++ -o Lucas $ (OBJ) -lbe
include / boot / develop / etc / makefile-engine

Зверніть увагу, що для успішної компіляції програми необхідно пов`язати об`єктні файли зі стандартною бібліотекою Be (для побудови графічного інтерфейсу користувача BeOS та Haiku використовують власну графічну середу), а також підключити посилання на makefile-engine.

Програмування для Haiku OS крок за кроком: створення вікна програми
Перша програма на Haiku API

Викличте термінал в каталозі з вихідними текстами програми і наберіть «make». Запустіть програму і переконайтеся, що її розміри не змінюються перетягуванням, а кнопка масштабування в заголовку відсутня (див. Рис. Вище).

У другій частині (наступний випуск «Open Source») ми створимо ігрове поле для нашої головоломки і почнемо використовувати IDE.



Вирішили дістати цю статтю в друкованому варіанті, але картридж принтера "наказав довго жити"? Що ж, в такому разі я можу порекомендувати Вам тільки заправити картридж на Жовтневому Поле (https://brg-cosmetics.ru/moscow/oktpole-metro-file-zapravka-cart.htm)! Дана процедура коштує набагато дешевше, ніж покупка нового картриджа, і може проводиться безліч разів!

ІНШЕ

Вікна монблан фото

Вікна монблан

Відео: Вікна Montblanc NordВікна ПВХ з профілю Монблан оселилися в будинках росіян дванадцять років тому. У 2001 році…

Qt 4 в haiku os: установка фото

Qt 4 в haiku os: установка

Відео: Haiku OS (hrev50767, 2016, Virtualbox) Install & ReviewДе взяти Наявні версії портів Qt можна знайти за…

Обробка подій в juce фото

Обробка подій в juce

Відео: Уроки javascript | Урок №13 - Події і обробник подій Переважна більшість тулкіта для С ++ (Gtk +, Qt,…

Мова програмування vala фото

Мова програмування vala

Hello world! Розгляд будь-якої мови програмування традиційно належить починати з найпростішої програми «Hello…

Використовуємо the jucer фото

Використовуємо the jucer

Відео: Соковижималка Novis Vitajuicer Візуальний редактор компоновок The Jucer Як ми вже переконалися, розміщувати…

Ultimate ++: перша програма фото

Ultimate ++: перша програма

Відео: Уроки C # (C sharp) | # 3 - Перша програма на C # Перейдемо до реального прикладу. Напишемо просту марну…

» » Програмування для haiku os крок за кроком: створення вікна програми