你能获得NativeWindow最小化事件吗?

时间:2011-12-31 09:31:52

标签: windows flash actionscript-3 air minimized

在AIR中使用NativeWindow时,每次窗口最小化/未最小化时,是否可以获得事件?我尝试与DisplayStateChanged挂钩,但是当窗口最小化时它没有触发。你知道如何举办这样的活动吗?

我使用的是Windows 7,32位,而且我正在运行AIR 3.5。

这是初始代码:

        var init:NativeWindowInitOptions = new NativeWindowInitOptions();
        init.maximizable = true;
        init.resizable = true;
        init.type = NativeWindowType.NORMAL;
        init.minimizable = true;
        window = new NativeWindow(init);
        window.alwaysInFront = true;
        window.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, dispChange, false, 0, true);

这是处理程序:

    private function dispChange(e:NativeWindowDisplayStateEvent):void {


        // if minimized / un-minimized
        if (e.beforeDisplayState == NativeWindowDisplayState.NORMAL && e.afterDisplayState == NativeWindowDisplayState.MINIMIZED) {
            trace("MINIMIZED!");

        }else if (e.beforeDisplayState == NativeWindowDisplayState.MINIMIZED && e.afterDisplayState == NativeWindowDisplayState.NORMAL) {
            trace("Un-MINIMIZED!");

        }
    }

4 个答案:

答案 0 :(得分:2)

窗口实际上是否可以最小化(检查window.minimizable,而不仅仅是init设置)?

我也想知道结果:

if (e.beforeDisplayState == NativeWindowDisplayState.MINIMIZED) trace("min before");

if (e.afterDisplayState == NativeWindowDisplayState.MINIMIZED) trace("min after");

我还想知道上面“弱参考”评论的结果。这会影响垃圾收集,因此测试总是一件好事。

答案 1 :(得分:2)

以下在使用AIR 3.3 / Flash Player 11.3的Windows 7 64位上正常工作。

import flash.display.NativeWindowDisplayState;
import flash.events.NativeWindowDisplayStateEvent;

~

stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, displayStateChangeEventHandler);

~

private function displayStateChangeEventHandler(event:NativeWindowDisplayStateEvent):void
{
    switch (stage.nativeWindow.displayState)
    {
        case NativeWindowDisplayState.MINIMIZED:    trace("window was minimized");
                                                    break;

        case NativeWindowDisplayState.NORMAL:       trace("window is normal");
    }
}

答案 2 :(得分:0)

最接近最小化事件的是激活事件。每当用户在应用程序外部点击时,该窗口都会被停用。然后,您可以使用minimize()自动最小化窗口。但是,当用户最小化窗口/切换到另一个窗口/切换时,也会调用停用的事件。当用户切换回来时,你会接到一个激活的电话。

window.addEventListener(Event.ACTIVATE, dispActive, false, 0, true);
window.addEventListener(Event.DEACTIVATE, dispDective, false, 0, true);

private function dispActive(e:Event):void {
    // un-minimized
}
private function dispDective(e:Event):void {
    // deactivated .. minimize again to be sure
    window.minimize();
}

答案 3 :(得分:0)

我正在获取最小化/非最小化的事件。我正在构建一个AIR 3.5应用程序。

window = stage.nativeWindow;
window.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, dispChange, false, 0, true);

function dispChange(e:Event):void {
        minimized = (window.displayState == "minimized");
        if (minimized) {
            trace("minimized!")
        }else {
            trace("UN-minimized!")
        }
    }