测试以查看窗口是否已最大化

时间:2009-08-05 10:43:01

标签: windows flex actionscript-3 air

我注意到在Windows中,如果您最大化窗口,则在再次取消最大化之前无法调整窗口大小。这似乎是一种正常的行为,所以当窗口最大化时,我想删除调整大小的抓手。

目前我找不到一个属性来检测窗口是否最大化,虽然我可以在我的控制器中添加一个布尔值,但它不一定会捕获从操作系统中最大化的请求。

因此,如果您知道测试窗口是否最大化的可靠方法,请告诉我。

在相关的说明中,我使用自定义chrome,当我最大化窗口时,它与windows任务栏重叠。我可以想到黑客可以检测可用的屏幕尺寸(使用透明系统镀铬窗口),但知道更好的方法会很好。

由于

罗布

7 个答案:

答案 0 :(得分:3)

在init方法中的应用程序(MXML)中,通常调用creationComplete:

<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;
        }
    }

答案 1 :(得分:2)

由于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);
            }

您可以将边界修改为过度最大化(这对于带阴影的自定义镶边窗口很方便),如果最大化按钮在已经最大化时(或者什么也不做),您还可以将应用程序设置为重置为默认大小)。

我遇到了关于何时分配窗口调整大小列表器的问题,并且每次单击最大化按钮时都会删除并添加它。这有点矫枉过正,但也不算太糟糕。

答案 2 :(得分:1)

Win32 API调用将为您执行此操作:

BOOL IsZoomed(HWND hWnd);

答案 3 :(得分:0)

您可以使用like this来挂钩maximize()事件吗?

答案 4 :(得分:0)

要从屏幕获取实际可用空间,请使用flash.display.Screen类,或者可以使用systemMaxSize()返回操作系统允许的最大窗口大小。为了最大化,您可以在最大化/最小化/恢复时显示窗口正在分离的一些事件。您可以在adobe页面(systemMaxSize下的链接)上找到更多信息。

检测窗口是否最大化...我认为没有这样的功能(我可能错了)但您可以测试应用程序大小是否与可用的屏幕大小相等,这意味着它已经最大化。或挂钩调整大小事件,该事件在应用程序最大化/最小化/调整大小时触发

答案 5 :(得分:0)

这是检查窗口是否最大化的更简单方法:

if(stage.nativeWindow.displayState == NativeWindowDisplayState.MAXIMIZED)
{
    //do something
}

答案 6 :(得分:0)

以下对我有用。无需设置事件侦听器,此代码可用于检查本机窗口的实时状态:

if (nativeWindow.displayState == 'maximized')
{
    trace('Maximized');
}
else
{
    trace('Minimized');
}