BeOS - статьи


Помещение репликанта на Shelf Deskbar'а - часть 4


Параметр deep отвечает за включение в архив всех объектов, принадлежащих архивируемому (true - включать, false - нет). Для нашего случая значение deep не играет роли.

Функция Instantiate распаковывает объект класса BMessage*, восстанавливая ранее созданный объект класса DRDAppViewClass. В случае, если переданный параметр (объект класса BMessage*) не является архивом объекта класса с именем VIEW_NAME, возвращается NULL.

DRDAppViewClass *DRDAppViewClass::
Instantiate(BMessage *data) { if(!validate_instantiation
(data, VIEW_NAME)) return NULL; return new DRDAppViewClass(data); };

Функции Archive и Instantiate явно в программе не вызываются. По-видимому, их вызов происходит в функции AddItem класса BDeskbar.

Вызов конструктора класса DRDAppViewClass(BMessage* msg) в функции Instantiate создает непосредственно тот объект, который будет помещен на Shelf Deskbar'а. Именно в этом конструкторе мы создадим и инициализируем все необходимые для работы объекты и переменные:

DRDAppViewClass::DRDAppViewClass
(BMessage *msg):BView(msg) { m=new BPopUpMenu("PopUpMenu",false,false); m->AddItem(new BMenuItem("About",
new BMessage(B_ABOUT_REQUESTED))); m->AddSeparatorItem(); m->AddItem(new BMenuItem("Quit",
new BMessage(B_QUIT_REQUESTED))); m->SetTargetForItems(this); bg=new BBitmap(BRect(0,0,15,15),B_CMAP8); bg->SetBits(bmpdata,256,0,B_CMAP8); return; };

Необходимыми объектами являются выпадающее меню и иконка, отображаемая на Shelf'е. Меню создается конструктором BPopUpMenu и содержит два пункта. Выбор пункта About приводит к появлению информации о программе, выбор пункта Quit приводит к удалению репликанта из Shelf'а. Для обеспечения возможности работы с меню включаем в текст программы соответствующие заголовочные файлы:

#include < MenuItem.h>

#include < PopUpMenu.h>

Иконка, отображаемая на Shelf'е, занимает квадрат размером 16x16 пикселов и представляет собой объект класса BBitmap. Рисунок иконки является 256-цветным.


Начало  Назад  Вперед



Книжный магазин