2010-04-02 97 views
3

因此,我注意到Windows 7有一種令人不安的傾向,即阻止您將窗口標題欄拖離屏幕頂部。如果您嘗試在這種情況下使用窗口底部可拖動區域的空氣應用程序,並允許您將窗口頂部向上推過屏幕 - 它只會將窗口向下踢足夠遠以至於標題欄位於它所認爲的「可見區域」的頂部。拖動時調整AIR應用程序窗口的大小

解決方法之一是在應用程序窗口移動時調整其大小,以便標題欄始終位於Windows需要的位置。但是,如何在拖動時調整窗口大小?你會這樣做嗎?

dragHitArea.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void{ 
    stage.nativeWindow.height += 50; 
    stage.nativeWindow.startMove(); 
    stage.nativeWindow.height -= 50; 
}); 

看看那裏發生了什麼?當我點擊時,我正在做startMove(),它掛鉤到OS的拖動窗口的功能。我也增加和減少了50個像素的窗口高度 - 這應該不會讓我淨增加,對吧?

錯誤 - 第一個'.height +='被執行,但.startMove()之後的'.height -='從未運行。

爲什麼?

+0

**更新** - 如果您好奇,我正在編程一個帶有向上和向上擴展的飛出菜單的空氣部件 - 並且由於這些部件只能在應用程序窗口本身的邊界內顯示即使該窗口設置爲無鑲邊且透明的),我必須展開應用程序的邊框以包含菜單「彈出」的區域。在極端的情況下,小部件位於左下角,菜單完全擴展到屏幕的右側和頂部邊緣,應用程序區域可以很好地覆蓋整個桌面。 – 2010-04-06 07:14:15

+0

問題是,當它像這樣擴展時,如果用戶將其向右拖動,它會導致應用程序窗口的「標題欄」區域移動到桌面區域的頂部邊緣之上,它通常會在無法訪問;並且一旦'.startMove()'操作完成,Windows就會自動將窗口重新定位到該邊緣之下。 所以我想要做的是不斷調整應用程序的高度,以便操作系統的利益,以便窗口的標題欄永遠不會超出桌面區域的頂部邊界。 – 2010-04-06 07:14:38

+0

我想知道是否有人意識到正確的答案很可能是「你不行」,如果他們提交,他們會得到這個賞金? – 2010-04-12 18:14:56

回答

-1

這似乎是一個有趣的效果,而不是所有的標準窗口行爲。你爲什麼覺得需要做任何事情?爲什麼不讓用戶根據自己的需要調整窗口大小?

+0

我的意思是,爲什麼我要這樣做並不重要,問題是*如何做到這一點......但是因爲它可能聽起來有點奇怪,我會更新問題以澄清。 – 2010-04-06 07:04:53

0

您是否嘗試過查看NativeWindowBoundsEvent.MOVING事件?

 
stage.nativeWindow.addEventListener(NativeWindowBoundsEvent.MOVING, windowMove); 
private function windowMove(e:NativeWindowBoundsEvent) : void { 
    trace(e.beforeBounds); 
    trace(e.afterBounds); 
    // resize window as needed based on these 
} 

引用:谷歌,這使我http://lowpitch.com/blog/nativewindow-using-air-windows-with-actionscript-part-3-of-3/害得我http://livedocs.adobe.com/flex/3/langref/flash/events/NativeWindowBoundsEvent.html

NativeWindowBoundsEvent.MOVING的位置已經改變之後觸發的位置,實際上改變之前,而NativeWindowBoundsEvent.MOVE被激發,如果你想知道。因此,你需要移動的事件

(順便說一下,我是很想,只是說:「你不能」沒有做的賞金任何研究......但認爲這將是平均值)

+0

明天早上我進入辦公室時,我會看一看。我知道,關閉它。 :) – 2010-04-13 07:32:40

+0

不是 - 添加「e.curentTarget.height = 50;」在你的事件處理程序中,當這個由於stage.nativeWindow.startMove()而引發的時候,無論你在聽什麼,高度都不會跳到50。我真的認爲這是無法完成的 - 當你拖動窗口重新定位窗口時,無法調整窗口的大小,也不能拖放窗口,使標題欄結束在桌面區域之上。 – 2010-04-13 18:51:18

+0

我希望你試過'e.currentTarget'而不是'e.curentTarget'嘿。但無論如何,如果這不起作用......以及這是一個可能的解決方法。而不是使用內置的東西,假的。將MOUSE_DOWN附加到您想要移動屏幕的位置。然後,當MOUSE_DOWN被激活時,附加MOUSE_MOVE和MOUSE_UP。在MOUSE_MOVE中,您可以手動移動窗口,如果需要調整大小。在MOUSE_UP中,您將刪除MOUSE_MOVE和MOUSE_UP。請注意,MOUSE_MOVE可能應該附加到舞臺上。 – jonathanasdf 2010-04-13 19:42:37

0

我已經開發了一個類似的應用程序,用飛出窗口,遇到一些問題後,我決定擺脫NativeWindows,並在屏幕大小的一個無鉻窗口中做所有事情。 每次應用程序啓動時,我都將窗口大小調整爲屏幕大小。我設計了一個帶有按鈕和所有東西的自定義標題欄,而該控件的主窗口實際上是一個Canvas,我在應用程序的窗口上拖動。彈出式菜單和窗口也是如此:它們只是基於Canvas的組件。 我沒有問題拖動窗口的可見區域以外的組件,因爲它與屏幕相同。

但是,正如我所說,做出如此激烈的改變可能遲到了。

+0

啊 - 我實際上已經嘗試過了,除了一個特殊的用例 - 多監視器設置,包括不平坦的屏幕,它幾乎可以工作。想象一下,筆記本電腦的屏幕和投影儀,或者一對水平和垂直對齊的屏幕,或者三個屏幕呈三角形配置 - 閃光燈在製作精確跨越整個可見區域的窗口時會遇到很多麻煩,有沒有辦法? – 2010-11-02 08:35:53

+0

它並沒有跨過我的腦海......我很高興只有一個屏幕:) – 2010-11-02 09:26:53

+0

哦科爾盧伊 - 相信我,幫你一個忙,並且至少把雙屏幕設置放在一起。你將永遠不會想回去。 – 2010-11-15 01:46:40