Тестирование, чтобы увидеть, развернуто ли окно - PullRequest
2 голосов
/ 05 августа 2009

Я заметил, что в Windows, если вы максимизируете окно, вы не можете изменить его размер, пока не развернете его снова. Кажется, это нормальное поведение, поэтому я хотел бы удалить мой захват для изменения размера, когда окно развернуто.

В настоящее время я не могу найти свойство для определения, развернуто ли окно, и хотя я могу добавить логическое значение в моем контроллере, оно не обязательно будет перехватывать запросы на максимизацию от ОС.

Так что, если вы знаете надежный способ проверить, развернуто ли окно, пожалуйста, дайте мне знать.

В связанной заметке я использую пользовательский Chrome, и когда я максимизирую окно, оно перекрывает панель задач Windows. Я могу подумать о взломах для определения доступного размера экрана (используя прозрачное системное окно Chrome), но было бы неплохо узнать о лучшем методе.

Спасибо

Rob

Ответы [ 7 ]

3 голосов
/ 30 ноября 2009

В вашем приложении (MXML) по методу init, который вы обычно вызываете при созданииComplete:

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    creationComplete="init()" >

Добавьте следующий код:

this.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, trackState);

метод выглядит так:

public function trackState(event:NativeWindowDisplayStateEvent):void
    {
        if (event.afterDisplayState == NativeWindowDisplayState.MAXIMIZED)
        {
            isMaximised = true;
        } else {
            isMaximised = false;
        }
    }
2 голосов
/ 21 августа 2009

Я выяснил, как это лучше всего сделать благодаря некоторым указателям из TheBrain.

Во-первых, вам нужно следить за событиями изменения размера окна, которым вы хотите управлять:

NativeApplication.nativeApplication.activeWindow.addEventListener(NativeWindowBoundsEvent.RESIZE, onWindowResize);

Затем обработайте это событие, чтобы решить, развернуто ли окно или нет:

public function onWindowResize(event:NativeWindowBoundsEvent):void
{
    if (event.afterBounds.height >= Screen.mainScreen.visibleBounds.height && event.afterBounds.width >= Screen.mainScreen.visibleBounds.width)
        isMaximised = true;
    else
        isMaximised = false;
}

Затем вам нужно поймать или создать собственную кнопку максимизации, и при нажатии выполнить следующий код:

            if (isMaximised)
            {
                var bounds:Rectangle = Screen.mainScreen.visibleBounds;
                NativeApplication.nativeApplication.activeWindow.bounds = bounds;
            }
            else
            {
                NativeApplication.nativeApplication.activeWindow.bounds = new Rectangle(100, 100, 500, 600);
            }

Вы можете изменить границы для максимального увеличения (что удобно для пользовательских хромированных окон с тенями), а также вы можете настроить приложение на сброс до размера по умолчанию, если кнопка «Развернуть» нажата, когда она уже развернута (или ничего не делать ).

У меня возникли проблемы с назначением списка изменения размера окна, и в итоге я удалял и добавлял его каждый раз при нажатии кнопки «Развернуть». Это немного излишне, но не так уж плохо.

1 голос
/ 05 августа 2009

Существует Win32 API Call, который сделает это за вас:

BOOL IsZoomed (HWND hWnd);

0 голосов
/ 22 сентября 2011

Следующее сработало для меня. Нет необходимости устанавливать прослушиватели событий, этот код можно использовать для проверки в реальном времени состояния собственного окна:

if (nativeWindow.displayState == 'maximized')
{
    trace('Maximized');
}
else
{
    trace('Minimized');
}
0 голосов
/ 07 июля 2010

Вот более простой способ проверить, развернуто ли окно:

if(stage.nativeWindow.displayState == NativeWindowDisplayState.MAXIMIZED)
{
    //do something
}
0 голосов
/ 13 августа 2009

, чтобы получить фактическое полезное пространство на экране, используйте класс flash.display.Screen , или вы можете использовать systemMaxSize () , который возвращает максимальный размер окна, разрешенный ОС. Для максимизации у вас есть некоторые события, которые окно выводит, когда максимизируется / минимизируется / восстанавливается. Вы можете найти больше информации на страницах Adobe (ссылка в systemMaxSize).

Чтобы определить, увеличено ли окно ... Я не думаю, что есть такая функция (я могу ошибаться), но вы можете проверить, равен ли размер приложения доступному размеру экрана, что означает, что он развернут. Или подключите событие изменения размера, которое запускается, когда приложение развернуто / свернуто / изменено в размере

0 голосов
/ 05 августа 2009

Можете ли вы использовать что-то , подобное этому , чтобы перехватить событие maximize()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...