BeOS - статьи


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


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

Функция Go() возвращает выбранный пункт меню. В данной программе пункты меню различаются по назначенным им сообщениям. Если выбран пункт About (сообщение B_ABOUT_REQUESTED), то выводится информация о программе. Если выбран пункт Quit (сообщение B_QUIT_REQUESTED), то вызывается функция QuitRequested(), которая удаляет выпадающее меню и репликант из Shelf'а. При невозможности удалить репликант выводится сообщение об ошибке:

bool DRDAppViewClass::QuitRequested(void) { BDeskbar d; status_t err=d.RemoveItem(VIEW_NAME); if (err!=B_OK) { char temp[255]; sprintf(temp, "Error removing:
%s", strerror(err)); BAlert *alert=new BAlert("", temp, "OK"); alert->Go(); } delete m; return true; }

Замечание: такой способ выхода из программы-репликанта Deskbar'а не приводит к полной потере Deskbar'ом информации о репликанте. Это можно проверить следующим образом: поместим репликант на Shelf и выгрузим его. Затем изменим что-либо в тексте программы, перекомпилируем и поместим на Shelf опять. Мы увидим, что на Shelf был помещен старый вариант репликанта, несмотря на то, что исполняемый файл, запущенный нами, уже изменен. Для того, чтобы на Shelf поместить измененный репликант, нужно перегрузить Deskbar (нажать Ctrl-Alt-Del, удалить Deskbar посредством Kill, затем опять нажать Ctrl-Alt-Del, а затем - появившуюся кнопку Restart the Desktop и Cancel для выхода из окна со списком задач).

Теперь программа полностью написана. Но, откомпилировав и запустив ее, мы увидим сообщение об ошибке: "Error starting: application could not be found". Дело в том, что mime-тип приложения APP_NAME не зарегистрирован в системе.


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



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