BeOS - статьи


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


Данные для его инициализации берутся из массива bmpdata размером 256 байт:

unsigned char bmpdata[256]={......};

// в фигурных скобках находятся 256 чисел, каждое в интервале от 0 до 255.

Установить соответствия между цветами и их числовыми значениями для режима B_CMAP8 можно с помощью программы 256. Также можно преобразовать уже готовый рисунок в заголовочный файл с помощью программы ImageToHeader.

Вывод рисунка иконки осуществляется функцией Draw(), которая устанавливает иконку в качестве фона для объекта класса DRDAppViewClass:

void DRDAppViewClass::Draw(BRect p) { SetViewBitmap(bg); Invalidate(BRect(0,0,15,15)); }

Функция Draw() вызывается системой каждый раз при необходимости перерисовать изображение, а программой - при присоединении объекта класса DRDAppViewClass к Shelf'у в функции AttachedToWindow:

void DRDAppViewClass::AttachedToWindow() { Draw(BRect(0,0,15,15)); }

Осталось рассмотреть две функции класса DRDAppViewClass. Функция MouseDown() вызывается системой при нажатии на иконке клавиши мыши. В ней производится обработка нажатий:

void DRDAppViewClass::MouseDown(BPoint p) { uint32 b; BPoint p1; GetMouse(&p1, &b); if(b==B_SECONDARY_MOUSE_BUTTON) { p1.Set(0,0); ConvertToScreen(&p1); BRect r=BRect(p1.x,p1.y,p1.x+15,p1.y+15); ConvertToScreen(&p); BMenuItem *mi=m->Go(p, false, true, r); if(mi) switch (mi->Message()->what) { case B_ABOUT_REQUESTED: (new BAlert("","Deskbar Replicant Demo
\nby Al.V. Sarikov.\nKherson, Ukraine, 2004. \nE-mail: avix@ukrpost.net.\nHome page:
http://avix.pp.ru.","OK"))->Go(); break; case B_QUIT_REQUESTED: QuitRequested(); break; } } else if(b==B_PRIMARY_MOUSE_BUTTON) (new BAlert("","Deskbar Replicant Demo
\nby Al.V. Sarikov.\nKherson, Ukraine, 2004. \nE-mail: avix@ukrpost.net.\nHome page:
http://avix.pp.ru.","OK"))->Go(); }

При нажатии левой клавиши мыши (Primary Mouse Button) выводится информация о программе и авторе. При нажатии правой клавиши мыши (Secondary Mouse Button) вызывается выпадающее меню функцией Go().


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



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