Существует проблема: при двух и более эльфах, которые требуют управление с рабочего стола, и при приходе ивента клавиши вызывают APP_ConsumeEv - получается черти что.
Поэтому вот нам менеджер эльфов рабочего стола - HomeScreenTools.
Информация для разработчиков:
Первое что нужно сделать - добавить себе в SDK в ивенты:
Далее, если эльф использует управление на рабочем столе он должен регистрироваться, дерегистрироваться и ловить ивент сообщающий о выбранном регионе.
А теперь по порядку.
Для регистрации вызываем
Структура данных:
При выходе вызываем:
Кроме того, надо ловить ивент DESKAPP_GET_FOCUS_EV и обрабатывать его функцией:
Ну и обрабатывать клавиатуру надо только если IsActive == true
Для пользователей:
Если есть нужда - пропишите HomeScreenTools в авторан.
Скачать с исходниками:
Сообщение отредактировал DmT - 6.1.2009, 13:26
Поэтому вот нам менеджер эльфов рабочего стола - HomeScreenTools.
Информация для разработчиков:
Первое что нужно сделать - добавить себе в SDK в ивенты:
Код
#define NEW_DESKTOP_APP_EV 0xFFD0
#define DEL_DESKTOP_APP_EV 0xFFD1
#define DESKAPP_GET_FOCUS_EV 0xFFD2
#define DEL_DESKTOP_APP_EV 0xFFD1
#define DESKAPP_GET_FOCUS_EV 0xFFD2
Далее, если эльф использует управление на рабочем столе он должен регистрироваться, дерегистрироваться и ловить ивент сообщающий о выбранном регионе.
А теперь по порядку.
Для регистрации вызываем
Код
UINT32 RegRegionOnDesktop( EVENT_STACK_T *ev_st, APPLICATION_T *app )
{
DESKAPP_DATA_T Iam;
Iam.y = высота_на_которой_расположены_контрлы;
strcpy(Iam.app_name, app_name); // вместо app_name можно использовать что угодно, лишь бы повторения небыло.
AFW_CreateInternalQueuedEvAux(NEW_DESKTOP_APP_EV, FBF_LEAVE, sizeof(DESKAPP_DATA_T), &Iam);
return RESULT_OK;
}
{
DESKAPP_DATA_T Iam;
Iam.y = высота_на_которой_расположены_контрлы;
strcpy(Iam.app_name, app_name); // вместо app_name можно использовать что угодно, лишь бы повторения небыло.
AFW_CreateInternalQueuedEvAux(NEW_DESKTOP_APP_EV, FBF_LEAVE, sizeof(DESKAPP_DATA_T), &Iam);
return RESULT_OK;
}
Структура данных:
Код
typedef struct
{
char app_name[APP_NAME_LEN];
INT16 y;
} DESKAPP_DATA_T;
{
char app_name[APP_NAME_LEN];
INT16 y;
} DESKAPP_DATA_T;
При выходе вызываем:
Код
UINT32 UnRegRegion( EVENT_STACK_T *ev_st, APPLICATION_T *app )
{
AFW_CreateInternalQueuedEvAux(DEL_DESKTOP_APP_EV, FBF_LEAVE, sizeof(app_name), (char*)app_name);
return RESULT_OK;
}
{
AFW_CreateInternalQueuedEvAux(DEL_DESKTOP_APP_EV, FBF_LEAVE, sizeof(app_name), (char*)app_name);
return RESULT_OK;
}
Кроме того, надо ловить ивент DESKAPP_GET_FOCUS_EV и обрабатывать его функцией:
Код
UINT32 OnGetFocus( EVENT_STACK_T *ev_st, APPLICATION_T *app )
{
EVENT_T *event;
event = AFW_GetEv(ev_st);
if(namecmp(((DESKAPP_DATA_T*)event->attachment)->app_name, app_name)) IsActive = TRUE;
else IsActive = FALSE; // для мониторинга активности/неактивности
// Если используется графика(что желательно) тут стоит обновить интерфейс, с учетом активности/неактивности
return RESULT_OK;
}
{
EVENT_T *event;
event = AFW_GetEv(ev_st);
if(namecmp(((DESKAPP_DATA_T*)event->attachment)->app_name, app_name)) IsActive = TRUE;
else IsActive = FALSE; // для мониторинга активности/неактивности
// Если используется графика(что желательно) тут стоит обновить интерфейс, с учетом активности/неактивности
return RESULT_OK;
}
Ну и обрабатывать клавиатуру надо только если IsActive == true
Для пользователей:
Если есть нужда - пропишите HomeScreenTools в авторан.
Скачать с исходниками:
hst.zip ( 12.2 килобайт ) Кол-во скачиваний: 297 |
Сообщение отредактировал DmT - 6.1.2009, 13:26