как получить "не максимизированное" состояние окна wxWidget - PullRequest
1 голос
/ 20 октября 2011

У меня есть небольшое приложение wxWidget, которое может сохранить несколько настроек в простой XML-файл.Среди этих настроек я сохраняю положение, размер и развернутое состояние моего окна верхнего уровня, чтобы я мог восстановить его при следующем запуске.

По умолчанию, когда вы максимизируете окно, когда вы нажимаете снова, максимизироватьКнопка, вы вернетесь к своей первоначальной (не максимизированной) позиции / размера.Но когда я сохраняю свои предпочтения, единственная позиция и размер, которые я могу получить, это максимальная.Поэтому, когда пользователь перезапускает свое приложение и хочет «развернуть» его, окно все равно занимает весь экран.

В Windows XP я выполнил небольшую хитрость, которая заключалась в вызове SetMaximize (false)прежде чем получить позицию и размер.Это работало просто отлично.Но сейчас я на седьмом, и это больше не работает.Кажется, что SetMaximize (false) откладывается: когда я ломаюсь, это работает, но во время нормального выполнения я всегда получаю максимизированную позицию / размер, как будто операция unmaximize выполняется в другом потоке.

Поэтому я попытался добавить Sleep () сразу после моего вызова SetMaximize (false), но мне нужно использовать действительно высокое значение, чтобы убедиться, что он всегда работает, и мне это не нравится.

Итак, мой вопрос: есть ли способ получить положение и размер не развернутого окна?(Я также пытался отловить события изменения размера, но это работает только для размера, и мне также нужна позиция ... и не нашел никакого события "перемещено окно")

Заранее спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 09 ноября 2012

Это просто.

Класс "перемещенный в окно" - это wxMoveEvent, а тип события для перехвата любого движения - wxEVT_MOVE.Поэтому определите функцию в вашем классе окон верхнего уровня:

void MyFrame :: OnMove (wxMoveEvent & evt);

Привязать ее так:

Bind (wxEVT_MOVE, & MyFrame:: OnMove, this);

И в функции OnMove, и в функции OnSize проверьте, развернуто ли окно, вызвав функцию-член IsMaximized ().Когда он возвращает true, не изменяйте данные положения и размера.

0 голосов
/ 21 октября 2011

Я делаю это с:

wxPoint pos = GetPosition();
wxSize size = GetSize();

и работает с Win7 / XP и Linux.

...