Page 1 of 1

Как изменить порядок виджетов?

Posted: Mon Mar 24, 2008 10:01 am
by lester
У меня есть несколько виджетов на wxPanel без сайзера, когда два( или больше ) виджета пересекаются ( налаживаются друг на друга ) мне надо поменять их порядок( выше - ниже ), Lower() и Raise() не помогают, может у кого-то есть пример решения? Заранее спасибо

Posted: Mon Mar 24, 2008 10:21 am
by tan
А какая платформа?
У меня есть подозрение, что это работает только под MSW.

Posted: Mon Mar 24, 2008 11:24 am
by lester
tan wrote:А какая платформа?
У меня есть подозрение, что это работает только под MSW.
как раз под MSW и не работает :( для MacOS Lower() и Raise() работают как надо, а под windows почему-то нет

Posted: Mon Mar 24, 2008 11:40 am
by tan
lester wrote:
tan wrote:А какая платформа?
У меня есть подозрение, что это работает только под MSW.
как раз под MSW и не работает :( для MacOS Lower() и Raise() работают как надо, а под windows почему-то нет
Странно, в MSW порте просто вызывается API функция SetWindowPos(...), вроде должно работать. Попробуй вместо Lower()/Raise() явно юзать SetWindowPos(). Ну и там флагами поиграться. Может что-нить типа Refresh() требуется.

Posted: Mon Mar 24, 2008 12:26 pm
by lester
tan wrote: Странно, в MSW порте просто вызывается API функция SetWindowPos(...), вроде должно работать. Попробуй вместо Lower()/Raise() явно юзать SetWindowPos(). Ну и там флагами поиграться. Может что-нить типа Refresh() требуется.
оно визуально отрабатывает, но если сверху к примеру поводить другим окном - то опять отрисовка идет в старом порядке + обработка событий мыши не меняется

Posted: Mon Mar 24, 2008 9:26 pm
by T-Rex
Та же проблема была, пытался поверх wxHtmlWindow впихнутого в wxAUI отобразить комбик без сайзера. Пробовал Raise и вобще много чего пробовал, не помогло.
Решения вменяемого не нашел, вместо комбика заюзал wxMenu, щаз подумываю над хэндлером тегов, но это уже совсем другая история.

Posted: Tue Mar 25, 2008 6:26 am
by tan
Привет.
T-Rex wrote:Та же проблема была, пытался поверх wxHtmlWindow впихнутого в wxAUI отобразить комбик без сайзера. Пробовал Raise и вобще много чего пробовал, не помогло.
Ну это уже совсем странно. В таком варианте у меня работало (без АУИ, правда). А кто был парент у комбо бокса?
В первом случае, как я понимаю, все контролы имеют одного парента и плавают поверх него, тут вроде проблем нет. Проблема в Z-порядке их между собой. А в этом один комбо бокс с парентом wxHtmlWindow и так будет поверх него и никакого Raise не требуется. Или я чего-то не понимаю?

Posted: Wed Mar 26, 2008 9:39 pm
by T-Rex
Ну, я вначале думал что wxHtmlWindow не рендерит все сам, а хитро юзает sizer'ы, из-за чего у меня проблемы с Z-Order'ом возникают, но Spy++ показывает что он все рендерит ручками, поэтому было довольно странно наблюдать эти глюки. Пробовал родителем делать форму и сам wxHtmlWindow, эффект тот же. Ну мне особо так не надо было заморачиваться, думаю, слеплю-ка я хэндлер для комбиков и на этом все закончится.

Posted: Sat Apr 26, 2008 1:16 pm
by lester
вобщем на досуге попытаюсь руками сделать свой ZOrder через ручную отрисовку на wxClientDC и перенаправлении событий мыши родителю, а от него верхнему виджету по позиции

Posted: Mon Apr 28, 2008 1:55 pm
by T-Rex
Эээ,... клиент ДЦ это мм.. странно.
Я вобще смутно себе представляю ситуацию где его юзание оправдано. Хотя хз конечно. Там я помню с Клиент ДЦ проблема если поверх что-то само по себе ездит, например скринмэйт какой-нить, Neko например или там Virtual Girl. В общем если окна сами ездят по экрану, могут быть глюки с отрисовкой..

Posted: Mon Apr 28, 2008 5:29 pm
by lester
T-Rex wrote:Эээ,... клиент ДЦ это мм.. странно.
Я вобще смутно себе представляю ситуацию где его юзание оправдано. Хотя хз конечно. Там я помню с Клиент ДЦ проблема если поверх что-то само по себе ездит, например скринмэйт какой-нить, Neko например или там Virtual Girl. В общем если окна сами ездят по экрану, могут быть глюки с отрисовкой..
я выставляю флаг и по Idle отрисовываю виджет