2009-07-06 57 views
1

我需要保持我在應用程序的主窗口上創建的NativeWindow。如何保持頂級的原生窗口

當前我正在使用alwaysInFront = true,它不限於應用程序中的窗口。我可以成功地同步最小化/恢復/移動/調整大小操作,所以頂部窗口在這些情況下適當地運行。即使使用此選項也有缺點,即如果我將其他應用程序替換爲其他應用程序,則該窗口位於其他應用程序之上。

由於上述原因,我試圖在不使用alwaysInFront的情況下使用它。我嘗試過使用orderInFrontOf和orderToFront,它可以獲得它,但是當我點擊主窗口中的一個區域時,頂部的一個變爲隱藏,即空氣使它成爲頂部。

我試圖捕獲激活/停用事件,但它只發生在第一次點擊,所以在第二次點擊頂部窗口變得隱藏了。當主窗口變爲活動窗口時,我也嘗試使窗口處於活動狀態,但這會導致主窗口失去焦點,並且我無法點擊任何內容。

Ps。我正在這樣做,以改善我正在使用的HTMLOverlay的行爲 - 請參閱Flex Air HTMLLoader blank pop up window when flash content is loaded

回答

0

我最終打開/關閉alwaysInFront選項,根據主窗口或頂部窗口是否處於活動狀態,即如果沒有活動,我將其關閉。這還是我在問題中提到的。

通過這種方式,當用戶切換到另一個應用程序時,該窗口不會在其他應用程序之上。我仍然希望有一個解決方案,我不必使用alwaysInFront選項,或者更好的替代方案來解決我在上面鏈接到的外部站點問題中的彈性加載Flash問題。

Ps。我將嘗試與HTMLOverlay的所有者一起檢查以提交補丁(它是一種改進,儘管它與打開覆蓋時不打開額外窗口的應用綁定)。

更新:我已經對HTMLOverlay進行了更改。

0

傾聽Event.DEACTIVATE並呼籲event.preventDefault()應該有效。不知道這是否是你已經嘗試過,但我有一個應用程序在那裏做的伎倆。

+0

Thx,不幸的是,在我的情況下沒有工作。我的猜測是,在您的應用程序中,您使用的是alwaysInFront並取消了停用,因此它永遠不會關閉,或者您只需要一個窗口在主窗口最小化時保持打開狀態。看來問題是,如果我不使用alwaysInFront選項,那麼當空氣改變焦點到主窗口時,它會將它放在最前面,我找不到預防它的方法。 – eglasius 2009-07-06 17:55:08

0

我正在嘗試做一些非常相似的事情。在AIR應用程序中,我有一個大型的全屏窗口,它基本上是「桌面」。我總是希望這個窗口留在我的應用程序的所有其他窗口後面。但是,「桌面」窗口中有一些項目需要點擊。

似乎沒有乾淨的方法來強制窗口在窗口順序中保持其位置。

什麼我迄今,這是不完美的解決,是讓我的應用程序的所有其他窗口都使用alwaysOnTop財產,但綁定這一個全局變量(啊),我保持跟蹤整體應用程序級別活動/不活動狀態。這樣,當我切換到另一個應用程序時,我的窗戶不會漂浮在所有其他應用程序窗口之上 - 它們會像預期的那樣正常移動。

然後,我有一個完全透明的常規(alwaysOnTop = false)窗口,作爲桌面窗口的「疊加」,我可以放置各種交互式控件。這個窗口是可以挺身而出的,因爲它是透明的我的其他窗口總是在頂部。

最後,重要的是,我上安裝「桌面」窗口中有三個事件偵聽器,如下所示:

protected function onApplicationComplete(event:Event):void 
{ 
    this.addEventListener(MouseEvent.MOUSE_DOWN, onClickHandler, true,1000,true); 
    this.addEventListener(MouseEvent.CLICK, onClickHandler, true,1000,true); 
    this.nativeWindow.addEventListener(Event.ACTIVATE, onActivateWindow,false,-1); 
} 

protected function onActivateWindow(event:Event):void 
{ 
    trace("sent via activate to back"); 
    orderInBackOf(bigTransparentWindow); 
} 

protected function onClickHandler(event:MouseEvent):void 
{ 
    trace("sent via click to back"); 
    orderInBackOf(bigTransparentWindow); 
} 

我不是這一切完全是高興,因爲仍然有物體在一些偶爾明顯的閃爍覆蓋窗口 - 看起來「桌面」窗口在其前面被排序,發生某種更新,然後再次被強制排除。

歡迎任何更好的解決方案!

相關問題