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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
lester
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 211
Joined: Sat Sep 02, 2006 7:24 pm
Location: Ukraine

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

Post by lester » Mon Mar 24, 2008 10:01 am

У меня есть несколько виджетов на wxPanel без сайзера, когда два( или больше ) виджета пересекаются ( налаживаются друг на друга ) мне надо поменять их порядок( выше - ниже ), Lower() и Raise() не помогают, может у кого-то есть пример решения? Заранее спасибо

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Mon Mar 24, 2008 10:21 am

А какая платформа?
У меня есть подозрение, что это работает только под MSW.
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

lester
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 211
Joined: Sat Sep 02, 2006 7:24 pm
Location: Ukraine

Post by lester » Mon Mar 24, 2008 11:24 am

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

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Mon Mar 24, 2008 11:40 am

lester wrote:
tan wrote:А какая платформа?
У меня есть подозрение, что это работает только под MSW.
как раз под MSW и не работает :( для MacOS Lower() и Raise() работают как надо, а под windows почему-то нет
Странно, в MSW порте просто вызывается API функция SetWindowPos(...), вроде должно работать. Попробуй вместо Lower()/Raise() явно юзать SetWindowPos(). Ну и там флагами поиграться. Может что-нить типа Refresh() требуется.
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

lester
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 211
Joined: Sat Sep 02, 2006 7:24 pm
Location: Ukraine

Post by lester » Mon Mar 24, 2008 12:26 pm

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

User avatar
T-Rex
Moderator
Moderator
Posts: 1187
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Mon Mar 24, 2008 9:26 pm

Та же проблема была, пытался поверх wxHtmlWindow впихнутого в wxAUI отобразить комбик без сайзера. Пробовал Raise и вобще много чего пробовал, не помогло.
Решения вменяемого не нашел, вместо комбика заюзал wxMenu, щаз подумываю над хэндлером тегов, но это уже совсем другая история.

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Tue Mar 25, 2008 6:26 am

Привет.
T-Rex wrote:Та же проблема была, пытался поверх wxHtmlWindow впихнутого в wxAUI отобразить комбик без сайзера. Пробовал Raise и вобще много чего пробовал, не помогло.
Ну это уже совсем странно. В таком варианте у меня работало (без АУИ, правда). А кто был парент у комбо бокса?
В первом случае, как я понимаю, все контролы имеют одного парента и плавают поверх него, тут вроде проблем нет. Проблема в Z-порядке их между собой. А в этом один комбо бокс с парентом wxHtmlWindow и так будет поверх него и никакого Raise не требуется. Или я чего-то не понимаю?
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

User avatar
T-Rex
Moderator
Moderator
Posts: 1187
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Wed Mar 26, 2008 9:39 pm

Ну, я вначале думал что wxHtmlWindow не рендерит все сам, а хитро юзает sizer'ы, из-за чего у меня проблемы с Z-Order'ом возникают, но Spy++ показывает что он все рендерит ручками, поэтому было довольно странно наблюдать эти глюки. Пробовал родителем делать форму и сам wxHtmlWindow, эффект тот же. Ну мне особо так не надо было заморачиваться, думаю, слеплю-ка я хэндлер для комбиков и на этом все закончится.

lester
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 211
Joined: Sat Sep 02, 2006 7:24 pm
Location: Ukraine

Post by lester » Sat Apr 26, 2008 1:16 pm

вобщем на досуге попытаюсь руками сделать свой ZOrder через ручную отрисовку на wxClientDC и перенаправлении событий мыши родителю, а от него верхнему виджету по позиции

User avatar
T-Rex
Moderator
Moderator
Posts: 1187
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Mon Apr 28, 2008 1:55 pm

Эээ,... клиент ДЦ это мм.. странно.
Я вобще смутно себе представляю ситуацию где его юзание оправдано. Хотя хз конечно. Там я помню с Клиент ДЦ проблема если поверх что-то само по себе ездит, например скринмэйт какой-нить, Neko например или там Virtual Girl. В общем если окна сами ездят по экрану, могут быть глюки с отрисовкой..

lester
Filthy Rich wx Solver
Filthy Rich wx Solver
Posts: 211
Joined: Sat Sep 02, 2006 7:24 pm
Location: Ukraine

Post by lester » Mon Apr 28, 2008 5:29 pm

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

Post Reply