【问题标题】:Can you get the NativeWindow minimized event?你能得到 NativeWindow 最小化的事件吗?
【发布时间】:2012-01-31 00:35:58
【问题描述】:

在 AIR 中使用 NativeWindow 时,每次最小化/未最小化窗口时,您能否获得一个事件?我尝试与DisplayStateChanged 连接,但当窗口最小化时它不会触发。你知道如何获得这样的活动吗?

我使用的是 32 位 Windows 7,并且正在运行 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!");

        }
    }

【问题讨论】:

  • 您需要显示一些代码并描述发生这种情况的环境(如操作系统等)!
  • 请显示无效代码...
  • 显示代码。这对你有用吗?
  • 我敢打赌,是你的监听器中的弱引用做到了。尝试删除 addEventListener() 函数调用中的最后三个参数。
  • 我收到最大化和未最大化的事件,所以不是这样。

标签: windows flash actionscript-3 air minimized


【解决方案1】:

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

我也想知道结果:

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

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

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

【讨论】:

    【解决方案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");
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        我得到最小化/ unminimize事件。我正在构建一个 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!")
                }
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-17
          • 1970-01-01
          • 1970-01-01
          • 2020-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-30
          相关资源
          最近更新 更多