How to Privent wxFrame from Move and stay it maxsized
How to Privent wxFrame from Move and stay it maxsized
Создал киоск на линуксе с единственным приложением типа wxFrame.
Убрал у него заголовок и убрал стиль для изменения его размера мышкой.
Проблема теперь в том что menueBar ведет себя как заголовок, т.е. если схвачу его мышкой и начинаю тащить мышку, то окно перемещается
и отображает рабочий стол.
Рабочий стол конечно же пустой, но хотелось бы убрать такое странное поведение программно не извращаясь с настройками самого линукс.
Функци типа OnWindowMove я в хэлпах не нашел
Спасибо
Убрал у него заголовок и убрал стиль для изменения его размера мышкой.
Проблема теперь в том что menueBar ведет себя как заголовок, т.е. если схвачу его мышкой и начинаю тащить мышку, то окно перемещается
и отображает рабочий стол.
Рабочий стол конечно же пустой, но хотелось бы убрать такое странное поведение программно не извращаясь с настройками самого линукс.
Функци типа OnWindowMove я в хэлпах не нашел
Спасибо
Re: How to Privent wxFrame from Move and stay it maxsized
Есть wxMoveEvent. Можно попробовать в обработчике возвращать окно на место.
Re: How to Privent wxFrame from Move and stay it maxsized
Dobrogo vremeni sutok,
Moget poprobovat ShowFullScreen().
Ili prosto sozdat pustoj obrabotchik wxMoveEvent.
Kakaja versija GTK+ ispolzuetsja?
Esli otkljuchit resizing i titul u minimal sample - vse to ge samoe?
Spasibo.
Moget poprobovat ShowFullScreen().
Ili prosto sozdat pustoj obrabotchik wxMoveEvent.
Kakaja versija GTK+ ispolzuetsja?
Esli otkljuchit resizing i titul u minimal sample - vse to ge samoe?
Spasibo.
Re: How to Privent wxFrame from Move and stay it maxsized
Если использую
то вроде то что надо, но зато не могу открыть другие дочерние wxFrame, они прячутся за главной wxFrame
если пишу так
то опять же меню ведет себя снова как заголовок
заметил что такое поведеение только для GTK3, у gtk2 такого поведения нет.
Придется пробовать перехват сообщений wxMoveEvent.
Спасибо
Code: Select all
ShowFullScreen(true);
если пишу так
Code: Select all
ShowFullScreen(true, wxFULLSCREEN_NOBORDER | wxFULLSCREEN_NOCAPTION);
заметил что такое поведеение только для GTK3, у gtk2 такого поведения нет.
Придется пробовать перехват сообщений wxMoveEvent.
Спасибо
Re: How to Privent wxFrame from Move and stay it maxsized
Доброго времени суток,
Какая версия GTK+?
Thank you.
Какая версия GTK+?
Thank you.
Re: How to Privent wxFrame from Move and stay it maxsized
версия gtk3 стандартная в debian 10, и обновлять ее не хочу.
Ибо хочу сделать все программно, чтоб работало везде одинаково.
С wxMoveEvent все получилось
спасибо
Ибо хочу сделать все программно, чтоб работало везде одинаково.
С wxMoveEvent все получилось
спасибо
Re: How to Privent wxFrame from Move and stay it maxsized
Обнаружил проблему с wxMoveEvent
Прога "жрет" процессор на 100%. оказалось, что при установке позиции окна в wxPoint(0, 0)
опять вызывается wxMoveEvent, и так все в цикле один вызов вызывает другой вызов рекурсивно.
Как лучше предотвращать перемещения окна?
Спасибо
Прога "жрет" процессор на 100%. оказалось, что при установке позиции окна в wxPoint(0, 0)
опять вызывается wxMoveEvent, и так все в цикле один вызов вызывает другой вызов рекурсивно.
Как лучше предотвращать перемещения окна?
Code: Select all
void MyFrame::OnFrameMove2()
{
wxPoint pt(0, 0);
SetPosition(pt);
}
void MyFrame::OnFrameMove(wxMoveEvent& event)
{
if (GetIsKiosk() || GetIsDemo() || GetIsTerminal())
{
CallAfter(&MyFrame::OnFrameMove2);
event.Skip(0);
}
}
Re: How to Privent wxFrame from Move and stay it maxsized
Read the position of the window first, and if it's already at (0,0), don't call SetPosition().
Use the source, Luke!
Re: How to Privent wxFrame from Move and stay it maxsized
no,
After setting possition to (0, 0)
the real possition is set to (6, 43)
linux gtk3
After setting possition to (0, 0)
the real possition is set to (6, 43)
linux gtk3
Re: How to Privent wxFrame from Move and stay it maxsized
As sugested here viewtopic.php?f=1&t=26794&p=114388&hili ... nt#p114388
I set timer for every wxMoveEvent
This code is working, and prcessor is taking 85% only for 5-10 seconds
and log looks like
I set timer for every wxMoveEvent
This code is working, and prcessor is taking 85% only for 5-10 seconds
Code: Select all
void MyFrame::OnFrameMove2()
{
printf("OnFrameMove2\n");
int x, y;
GetPosition(&x, &y);
if(x || y)
{
printf("%dx%d\n", x, y);
wxPoint pt(0, 0);
SetPosition(pt);
GetPosition(&x, &y);
printf("%dx%d\n", x, y);
}
}
void MyFrame::OnFrameMove(wxMoveEvent& event)
{
printf("OnFrameMove\n");
if (GetIsKiosk() || GetIsDemo() || GetIsTerminal())
{
if (mvTimer)
{
if (mvTimer->IsRunning())
mvTimer->Stop();
mvTimer->Start(1000, true);
}
}
}
void MyFrame::onMoveWindowEnd(wxTimerEvent& event)
{
CallAfter(&MyFrame::OnFrameMove2);
}
Code: Select all
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
OnFrameMove
OnFrameMove2
1x27
OnFrameMove
0x0
Re: How to Privent wxFrame from Move and stay it maxsized
I guess the problem is that each SetPosition() call also generates a Move event. Try setting a flag before calling SetPosition(), and if the flag is set inside the Move event handler, do nothing.
BTW: is it really so under Linux that you can move a window when it's maximized? Under Windows that's impossible, event if the caption bar is visible.
BTW: is it really so under Linux that you can move a window when it's maximized? Under Windows that's impossible, event if the caption bar is visible.
Use the source, Luke!
Re: How to Privent wxFrame from Move and stay it maxsized
yes, you can check it on my demo virtual server.
Ther's no titlebar, but menuebar behaves like captionbar
https://dentasoft.ru/download.php
Thank you
Ther's no titlebar, but menuebar behaves like captionbar
https://dentasoft.ru/download.php
Thank you
Re: How to Privent wxFrame from Move and stay it maxsized
Dobrogo vremeni sutok,
Reshenie s tajmerom - looks like hack.
Try to use doublemax' suggestion.
Thank you.
Reshenie s tajmerom - looks like hack.
Try to use doublemax' suggestion.
Thank you.
Re: How to Privent wxFrame from Move and stay it maxsized
This won't help.
After calling SetPosition() - OnFrameMove() is called twice.
The first time immediately after calling SetPosition(), and second time after exiting from OnFrameMove2()
Not sure if this behaver would be all linux distributions
After calling SetPosition() - OnFrameMove() is called twice.
The first time immediately after calling SetPosition(), and second time after exiting from OnFrameMove2()
Not sure if this behaver would be all linux distributions
Re: How to Privent wxFrame from Move and stay it maxsized
The only solution I see, is setting the flag twice.
Just tested on windows, move event is called twice too, after setting SetPissition()
Just tested on windows, move event is called twice too, after setting SetPissition()
Code: Select all
wxPoint pt(0, 0);
m_nIsMoving++;
SetPosition(pt);
m_nIsMoving++;
}
}
void MyFrame::OnFrameMove(wxMoveEvent& event)
{
if(m_nIsMoving > 0)
{
m_nIsMoving--;
return;
}
...