2012-02-06 78 views
4

我有2个AIR应用程序(AB),它们能够通过LocalConnection对象进行通信。我已经证实,邮件确实正在被正确地发送/接收。如何管理外部应用程序中的窗口

我希望能够有A告知B来到前面。这两个应用程序是全屏:

stage.fullScreenSourceRect = new Rectangle(0, 0, 1080, 1920); 
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

我已经尝试了几种排列,但由于尚未似乎没有任何工作。

private function initSlave(channel: String): void { 
    conn = new LocalConnection(); 
    conn.client = { 
     'activateSlave': activateSlave 
    }; 
    conn.allowDomain("*"); 
    conn.connect("_" + channel); 
} 

private function activateSlave(): void { 
    stage.nativeWindow.orderToFront(); 

    // or 

    stage.nativeWindow.activate(); 

    // or 

    stage.nativeWindow.alwaysInFront = true; 
    stage.nativeWindow.alwaysInFront = false; 
} 

如果我留在窗口模式(stage.displayState = StageDisplayState.NORMAL)这两个应用程序,然后切换alwaysInFront实际工作。拨打activate()orderToFront()仍然无能为力。如果我尝试切换alwaysInFront,然后将应用程序设置为全屏,应用程序将在我的窗口应用程序后面全屏显示。也许在将应用设置为全屏之前,我应该等待一个事件?

我发现一个线索提到orderToFront()只能在同一个应用程序中相对于windows工作,这就解释了为什么它似乎没有做任何事情。

有没有人有任何见解把它拉掉?也许有一种方法可以将B嵌入到应用程序A中,因此它们实际上是相同的应用程序?我不确定如何使用AIR应用程序执行此操作,就像仅需加载SWF一样,因为需要外部资源。

+0

如果两个应用程序都不是全屏幕,您是否可以重现相同的问题? – keyle 2012-02-06 22:57:56

+0

我使用窗口化的应用程序进行了一些测试,从而更新了问题。 'activate()'在文档中明确表示它应该把窗口放在前面并获得焦点,但我看不到任何行为。 – 2012-02-06 23:07:18

+0

orderToBack()是否工作?我在想某种停用的窗口问题。 – keyle 2012-02-07 02:45:00

回答

2

由于没有人提供了解决方案,我只是提到我正在使用的破解。基本上我有2 LocalConnection频道,一个从AB,一个从BA。 可见程序(例如A)将褪色为白色,将visible设置为false,并发送消息给B放弃控制。 B已初始化为stage.nativeWindow.visible = false,并且当它从A收到消息时,它会以全白屏幕的形式显示,并在GUI中淡入。在A设置visiblefalse之间存在一个小的偏移,以给出B时间来显示,否则在两个窗口都被最小化的短暂时刻内会出现弹出。

无论如何,你去,这是丑陋的,但它实际上工作得很好。

相关问题