Размер/позиция фрейма wxFrame( диало Topic is solved
Размер/позиция фрейма wxFrame( диало
Здравствуйте. Необходимо узнать размер/позицию фрейма/диалога в развернутом состоянии( IsMaximized() = true ). Если быть точнее, - узнать параметры окна которые будут, когда пользователь нажмет на кнопку "Свернуть в окно", т.е. IsMaximized() = false;
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
Эээ.. думаю, в общем случае никак. Только делать Maximize, гребсти ClientRect или WindowRect. Думаю если завесить рабочий стол Appbar'ами то вряд ли с помощью wx можно будет получить предсказуемое значение размеров максимизированного окна да еще и под различными платформами.
Да, если тебе лайаут делать или там рисовать чего, то не проще ли уже после максимизации/восстановления применять изменения? Для этого и событие вроде ж есть.
Да, если тебе лайаут делать или там рисовать чего, то не проще ли уже после максимизации/восстановления применять изменения? Для этого и событие вроде ж есть.
Вообще подобный вопрос возник при написании кода, ответственного за сохранение настроек ГУИ отображения фрейма/диалогов после их закрытия и восстановление этих настроек при последующем запуске программы.T-Rex wrote:..вряд ли с помощью wx можно будет получить предсказуемое значение размеров максимизированного окна да еще и под различными платформами.
При этом, если взять, например, тот же фрейм( wxFrame ), находящийся в "оконном" положении( IsMaximized() = false ), развернуть его на весь экран, а затем опять восстановить до окна, то он вернется в первоначальное положение. Значит где-то внутри объекта wxFrame хранятся положение/размер, соответствующие "оконному" состоянию. Только, действительно, врядли можно получить эти цифры с помощью wx API.
Я на написание такой функциональности почти два дня убил в свое время:)Вообще подобный вопрос возник при написании кода, ответственного за сохранение настроек ГУИ отображения фрейма/диалогов после их закрытия и восстановление этих настроек при последующем запуске программы.
Получить данные которые ты хочешь я не нашел как, но разве это может остановить истиных джедаев?:)
Это основной момент:
Code: Select all
void WindowManagerHelper::OnSize( wxSizeEvent& event )
{
// Эта строчка работает потому что мы в попадаем сюда в следующих случаях 1. изменение размера 2. Максимизаци
// 3. Востановление МАКСимизированного окна 4. Востановление МИНИмизированного окна - во всех случах IsMaximized() возвращает что надо
// При минимизации этот код не вызывается - так что все ок
// Вообще все это нужно, потому что мы не можем корректно определить при закрытии окна - максимизированны ли мы. Если вдруг окно максимизированно и свернуто
// то IsMaximized вернет фалсе - что ложь
IsMaximized=parent->IsMaximized();
// Запоминаем истинные размеры окна, в конце этого тоже сделать не можем - потому что если окно свернуто или макисизированно - возврашяется фигня
if (!parent->IsMaximized() && !parent->IsIconized())
{
PosX=parent->GetPosition().x;
PosY=parent->GetPosition().y;
SizeW=parent->GetSize().x;
SizeH=parent->GetSize().y;
}
event.Skip();
}
void WindowManagerHelper::OnMove(wxMoveEvent& event )
{
// Запоминаем истинные размеры окна, в конце этого тоже сделать не можем - потому что если окно свернуто или макисизированно - возврашяется фигня
if (!parent->IsMaximized() && !parent->IsIconized())
{
PosX=parent->GetPosition().x;
PosY=parent->GetPosition().y;
}
event.Skip();
}
IsMaximized - моя переменная в которой руками отслеживаю состояние.
parent-> просто потому что этот код реализован в ввиде класса помощника, а не прямо в коде фрейма.
Best regards, Nikolay
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets
wxWidgets in russian
Small Notes Manager and Clipboard Manager with History written with wxWidgets