Новость из категории: Информация

Программирование для Haiku OS шаг за шагом: меню и логика программы

Содержание:
1. Добавление меню (Вы читаете данный раздел);
2. Обработка сообщений и реализация логики работы программы.
Программирование для Haiku OS шаг за шагом: меню и логика программы

Вначале увеличим вертикальные размеры программы. В файле реализации класса TProgramme задайте размеры прямоугольника главного окна (pMainWindow) как BRect(100, 100, 665, 205). Для упрощения расчёта размеров виджетов в файле реализации класса TCentralWidget уберите рамку у панели (pPanel), задав в качестве последнего параметра её конструктора B_NO_BORDER.

Добавим в объявление класса следующие закрытые члены:
- BMenuBar* pMenuBar;
- BMenu* pGameMenu;
- BMenu* pAboutMenu;
- BMenuItem* pGameNewMenuItem;
- BMenuItem* pGameExitMenuItem;
- BMenuItem* pAboutMenuItem.

Класс BMenuBar (заголовочный файл MenuBar.h) обеспечивает прямоугольную область в главном окне приложения, в которой отображаются элементы меню. Подобно другим контейнерам для отображения (views), BMenuBar не несёт каких-либо иных функций кроме отрисовки и организации дочерних виджетов.

Класс BMenu отображает прямоугольную область со списком пунктов меню и соответствующий заголовок в панели меню (BMenuBar). В нашем меню всего два пункта: «Игра» (объект pGameMenu) и «?» (объект pAboutMenu).

Класс BMenuItem отображает один пункт меню в пределах прямоугольной области, создаваемой BMenu. При щелчке по тому или иному пункту меню генерируется сообщение BMessage, принимающее в качестве параметра целочисленную (uint32) константу. Уберём из объявления класса главной формы TMainForm строчку uint32 uiBTTN_MSG; и добавим константы, необходимые для работы как пунктов меню, так и кнопок игровой доски (см. листинг 1).

Листинг 1
#include
#include
#include
#include
#include
#include "TMainForm.h"
#include "TCentralWidget.h"
#include "TChip.h"
const uint32 uiGAMENEW _ MSG = 'GMNW';
const uint32 uiABOUT _MSG = 'ABT';
const uint32 uiBTTN1 _ MSG = 'BTN1';
const uint32 uiBTTN2 _ MSG = 'BTN2';
const uint32 uiBTTN3 _ MSG = 'BTN3';
const uint32 uiBTTN4 _ MSG = 'BTN4';
const uint32 uiBTTN5 _ MSG = 'BTN5';
const uint32 uiBTTN6 _ MSG = 'BTN6';

Заметим, что дочерние виджеты класса BMenu могут отображаться либо в виде столбца (параметр конструктора B_ITEMS_ IN_COLUMN), либо в виде матрицы (параметр B_ITEMS_IN_ MATRIX). Добавление дочерних виджетов осуществляется функцией AddItem. Реализация добавления меню приложения с расчётом размеров игровой доски представлена в листинге 2.

Листинг 2
BRect MenuFrame(0, 0, WindowFrame.Width(), 10); pMenuBar = new BMenuBar(MenuFrame, "MenuBar"); pGameMenu = new BMenu("Игра", B _ ITEMS _ IN _ COLUMN); pAboutMenu = new BMenu("?", B _ ITEMS _ IN _ COLUMN);
pGameNewMenuItem = new BMenuItem("Новая",
new BMessage(uiGAMENEW _ MSG), 'N', B _ COMMAND _ KEY);
pGameExitMenuItem = new BMenuItemC'Ebm^",
new BMessage(B _ QUIT _ REQUESTED), 'Q', B _ COMMAND _ KEY);
pAboutMenuItem = new BMenuItem("C программе",
new BMessage(uiABOUT _ MSG), 'A', B _ COMMAND _ KEY);
pGameMenu->AddItem(pGameNewMenuItem); pGameMenu->AddSeparatorItem(); pGameMenu->AddItem(pGameExitMenuItem); pMenuBar->AddItem(pGameMenu);
pAboutMenu->AddItem(pAboutMenuItem); pMenuBar->AddItem(pAboutMenu);
this->AddChild(pMenuBar); // Добавление панели меню на форму this->SetKeyMenuBar(pMenuBar); // Включение «горячих» клавиш
// Расчёт размеров игровой доски в зависимости от размеров меню. BRect ViewFrame(0, MenuFrame.Height(), WindowFrame.Width(), WindowFrame.Height());
pCentralWidget = new TCentralWidget(ViewFrame, "CentralWidget");

Программирование для Haiku OS шаг за шагом: меню и логика программы

Добавим в объявление класса главной формы массив указателей на сообщения от фишек (BMessage* pChipMessage) и переменную для хранения верхней координаты фишек (float fChipTop). Теперь можно окончательно оформить внешний вид программы, изменив код в конструкторе класса TMainForm следующим образом (см. листинг 3).
Листинг 3
pChipMessage[0] = new BMessage(uiBTTN1 _ MSG);
pChipMessage[1] = new BMessage(uiBTTN2 _ MSG);
pChipMessage[2] = new BMessage(uiBTTN3 _ MSG);
pChipMessage[3] = new BMessage(uiBTTN4 _ MSG);
pChipMessage[4] = new BMessage(uiBTTN5 _ MSG);
pChipMessage[5] = new BMessage(uiBTTN6 _MSG);
fChipTop = MenuFrame.Height(); // Координаты 1-й кнопки
BRect ButtonFrame = BRect(5, fChipTop, 80, 80);
pChip[0] = new TChip(ButtonFrame, "Button", " >", pChipMessage[0]);
pChip[0]->iCell = 1;
int iX = 5;
int iY = 80;
for(int i = 1; i 3)
{
j—; // Средняя ячейка свободна Colour = BlackChip;
}
pChip[j] = new TChip(ButtonFrame, "Button", J "", pChipMessage[j]);
pChip[j]->iCell = i + 1;
pChip[j]->Colour = Colour; if(pChip[j]->Colour == J
WhiteChip) pChip[j]->SetLabel(" >");
else pChip[j]->SetLabel("<");
}
}

Рейтинг статьи

Оценка
5/5
голосов: 1
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх