Страниц: [1]
  Печать  
Автор Тема: Окна PhAB  (Прочитано 9040 раз)
Jsk
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« : Августа 24, 2006, 10:08:12 am »

Подскажите: как программно открыть-закрыть диалоговое окно, нарисованное в PhAB?
Записан
kuenix
Участник
*
Offline Offline

Сообщений: 0


Просмотр профиля
« Ответ #1 : Августа 24, 2006, 12:34:37 pm »

для вызова окна: ApCreateModule
только, перед работой с этой функцией, в PhaB надо сначала создать internal module link для желаемого диалога.

А закрыть можно с помощью PtDestroyWidget
Записан
juvf
Участник
*
Offline Offline

Сообщений: 22


Просмотр профиля
« Ответ #2 : Августа 30, 2006, 08:13:55 am »

А ктонить знает, как программно проверить, скрыто окно или нет?
Записан
Wlad
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #3 : Августа 30, 2006, 12:09:02 pm »

juvf
А ктонить знает, как программно проверить, скрыто окно или нет?

Если это один процесс - у вас всегда есть доступ к ссылке. Если в разных - вам известно имя процесса.
Записан
juvf
Участник
*
Offline Offline

Сообщений: 22


Просмотр профиля
« Ответ #4 : Августа 30, 2006, 02:13:20 pm »

создаю окно в PhAB-e и выставляю флаг Ph_WM_STATE_ISHIDDEN. При запуске программы создаю диалог Name в коде так:

ApCreateModule(ABM_Name, ABW_base, NULL);

выполняю

ushort sost = PtWindowGetState( ABW_Name );

ловушка, sost = 0x101, т.е. Ph_WM_STATE_ISHIDDEN = 1, окно Name не видно, продолжить ....
в определенном месте делаю это окно видимым так

PhWindowEvent_t WE;
memset( &WE, 0, sizeof(WE));
WE.event_f = Ph_WM_HIDE;
WE.rid = PtWidgetRid( ABW_Name);
WE.event_state = Ph_WM_EVSTATE_UNHIDE;
PtForwardWindoEvent(&WE);
sost = PtWindowGetState( ABW_Name );

ловушка, sost = 0x100, т.е. Ph_WM_STATE_ISHIDDEN = 0, окно видно, продолжить ....

Потом, в нужном месте прячу его подобным образом

PhWindowEvent_t WE;
memset( &WE, 0, sizeof(WE));
WE.event_f = Ph_WM_HIDE;
WE.rid = PtWidgetRid( ABW_Name);
WE.event_state = Ph_WM_EVSTATE_HIDE;
PtForwardWindoEvent(&WE);
sost = PtWindowGetState( ABW_Name );

ловушка, sost = 0x100, Ph_WM_STATE_ISHIDDEN = 0, но окно невидно, т.е. окно скрыто, а флаг Ph_WM_STATE_ISHIDDEN грит, что оно не скрыто Huh?

почему окно не видно, а флаг говорит, что видно? как это разрулить?
Записан
lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #5 : Августа 30, 2006, 03:13:29 pm »

juvf
почему окно не видно, а флаг говорит, что видно? как это разрулить?

Потому что код неправльный.

HIDE

    PhWindowEvent_t windowevent;

    memset( &windowevent, 0, sizeof (event) );
    windowevent.event_f = Ph_WM_HIDE;
    windowevent.event_state = Ph_WM_EVSTATE_HIDE;
    windowevent.rid = PtWidgetRid(window);
    PtForwardWindowEvent(&windowevent);

UNHIDE

    PhWindowEvent_t windowevent;

    memset( &windowevent, 0, sizeof (event) );
    windowevent.event_f = Ph_WM_RESTORE;
    windowevent.event_state = Ph_WM_EVSTATE_UNHIDE;
    windowevent.rid = PtWidgetRid(window);
    PtForwardWindowEvent(&windowevent);
Записан

lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #6 : Августа 30, 2006, 03:17:25 pm »

Хотя вначале код тоже правильный. Делается ли после PtForward... PtFlush ?
Записан

lestat
QOR.Moderator
*****
Offline Offline

Сообщений: 985


I don't trust anything


Просмотр профиля WWW
« Ответ #7 : Августа 30, 2006, 03:20:17 pm »

Еще можно попробовывать все HIDE заменить на ICON и ICONIFY.

QSSL утверждает, что пока это одно и то же, что и HIDE, но я замечал разницу в поведении.
Записан

juvf
Участник
*
Offline Offline

Сообщений: 22


Просмотр профиля
« Ответ #8 : Августа 31, 2006, 09:09:16 am »

ПОБЕДИЛ!!!
после UNHIDE у меня стоит передача фокуса новому окну. А после HIDE нет передачи фокуса скрытому окну, т.к. это не нужно, ведь это окно скрыто. Добавил после скрытия передачу фокуса скрытому окну и все заработало. Т.е. Ph_WM_STATE_ISHIDDEN стал соответствовать состоянию окна. Huh? и как это так работает?
Записан
JimmyQNX
Jr. Member
**
Offline Offline

Сообщений: 50


Просмотр профиля
« Ответ #9 : Ноября 25, 2011, 01:41:07 pm »

qnx4 PhAB. Есть окно главного приложения, на нём по 3 кнопкам вызываются окна. по виджету на главном окне PtTimer вызывается диалог, на котором 2 кнопки. Одна закрывает открытое окно и само приложение, другая закрывает сам диалог, но оставляет открытое окно и само приложение соответственно. Вот как можно закрыть/спрятать диалог программно, чтоб он вновь создался/появился по прошествии периода PtTimer? При использовании PtDestroyWidget после 1го закрытия диалога он в дальнейшем не создаётся.
« Последнее редактирование: Ноября 25, 2011, 02:00:27 pm от JimmyQNX » Записан
qnxloder
Sr. Member
****
Offline Offline

Сообщений: 292


Просмотр профиля
« Ответ #10 : Ноября 25, 2011, 04:25:15 pm »

PtUnrealizeWidget
Записан
Страниц: [1]
  Печать  
 
Перейти в: