Официальный форум СВД Встраиваемые Системы
20 Апрель, 2024, 08:22:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Корректное создание региона  (Прочитано 2465 раз)
ad
Пользователь

Сообщений: 70


« : 14 Сентябрь, 2014, 22:50:52 »

Система QNX 4.25. Необходимо выполнять какие-то действия при нажатии на кнопки F1-F8. Для этого необходимо использовать Photon emit(ы). Взял пример у коллег. Функция создания региона, который обрабатывается - вся область фотона. Проблема в том, что после выполнения этой функции виртуальную машину, на которой это все запускается приходиться перезагружать, так как приложение перехватывает сообщения клавиатуры и мыши, а я не знаю, как именно выбрать область активного окна. Кто-нибудь может помочь? Вот вся функция:
Код:
/**
 * @brief This function creates two Photon regions. We need one of them, which
 *   covers entire Photon space to listen Ph_EV_RAW events. The second one
 *   is used to emit Ph_EV_RAW_PTR events.
**/
static int create_region()
{
PhRegion_t region;
PhRect_t rect;

memset(&region, 0, sizeof(region));

region.events_sense = Ph_EV_RAW;

region.flags = Ph_KBD_REGION | Ph_PTR_REGION | Ph_FORCE_FRONT;

    region.origin.x = region.origin.y = 0;
region.input_group = 1;

// Cover all Photon space
rect.ul.x = rect.ul.y = SHRT_MIN;
rect.lr.x = rect.lr.y = SHRT_MAX;

if((Rid = PhRegionOpen(Ph_REGION_FLAGS | Ph_REGION_EV_SENSE |
Ph_REGION_RECT, &region, &rect, NULL)) == -1)
{
printf("PhRegionOpen have errors: [%s]\n", strerror(errno));
fflush(stdout);
return -1;
}

PhRegionQuery(Rid, &region, NULL, NULL, 0);
region.events_opaque = Ph_EV_RAW;
PhRegionChange(Ph_REGION_EV_OPAQUE, 0, &region, NULL, NULL);

region.input_group = 1;
region.flags = Ph_PTR_REGION | Ph_FORCE_FRONT;
rect.ul.x = rect.ul.y = rect.lr.x = rect.lr.y = 0;

if((Ptr = PhRegionOpen(Ph_REGION_FLAGS | Ph_REGION_INPUT_GROUP |
Ph_REGION_RECT, &region, &rect, NULL)) == -1)
{
printf("PhRegionOpen have errors: [%s]\n", strerror(errno));
fflush(stdout);
return -1;
}

return 0;
}
Записан
Александр Пономарев
Интересующийся

Сообщений: 4



« Ответ #1 : 15 Сентябрь, 2014, 17:06:56 »

Здравствуйте!

В официальной документации есть полный пример создания региона с обработкой событий:
http://www.qnx.com/developers/docs/qnx_4.25_docs/photon114/lib_ref/ph/phregionopen.html


Записан

ad
Пользователь

Сообщений: 70


« Ответ #2 : 16 Сентябрь, 2014, 21:13:27 »

Здравствуйте!

В официальной документации есть полный пример создания региона с обработкой событий:
http://www.qnx.com/developers/docs/qnx_4.25_docs/photon114/lib_ref/ph/phregionopen.html
Ну пример, немного не тот. Но спасибо. Ошибка была в том, что я не делал PhEventEmit() в функции-callback handler() для случаев, когда кнопки не F1-F8. Но вопрос задам немного по другому как функциями Photon определить регион активного терминального окна?
Записан
Андрей Панченко
Сотрудник СВД ВС
Опытный пользователь

Сообщений: 106



WWW
« Ответ #3 : 17 Сентябрь, 2014, 15:30:43 »

Если под активным окном понимается окно, находящееся поверх других, то получить соответствующий ему регион можно с помощью функции PhQueryRids() с параметром type равном Ph_WINDOW_REGION. Регион окна, находящегося поверх других, будет находиться в конце списка полученных регионов. Так как в QNX 4.25 обычно поверх других находится Photon Desktop Manager, то интересующий регион будет предпоследним.

Если под активным окном понимается окно, имеющее фокус, то я не знаю способа найти соответствующий регион. Так как фокусом управляет Photon window manager и только он знает какое окно имеет фокус и перенаправляет ему события клавиатуры.

Так же я не знаю способов определить терминальное (pterm?) это окно или какое-либо другое.
Записан

Сотрудник СВД Встраиваемые Системы
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2024 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 20 Июль, 2023, 07:29:21