所以我注意到Windows 7有一种令人不安的倾向,就是阻止你将窗口的标题栏拖离屏幕顶部。如果您尝试 - 在这种情况下,使用窗口底部带有可拖动区域的空中应用程序,允许您将窗口顶部向上推过屏幕 - 它只是将窗口向下拉回到足够远的标题栏是它所认为的“可见区域”的顶部。
一种解决方案是在移动时调整应用程序窗口的大小,以便标题栏始终是Windows所需的位置。不过,在拖动窗口时,如何调整窗口大小?你会这样做吗?
dragHitArea.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void{
stage.nativeWindow.height += 50;
stage.nativeWindow.startMove();
stage.nativeWindow.height -= 50;
});
看看那里发生了什么?当我点击时,我正在做startMove()
,这是挂钩操作系统的功能,用于拖动窗口。我也增加和减少了50个像素的窗口高度 - 这应该不会给我带来净增加,对吗?
错误 - 第一个“.height +=
”被执行,但.height -=
之后的“.startMove()
”从未运行。
为什么?
答案 0 :(得分: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 }
引用:Google,它引导我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
。因此,您需要MOVING事件
(顺便说一下,我很想在没有对赏金进行任何研究的情况下说“你不能”......但觉得这意味着什么)
答案 1 :(得分:0)
我开发了一个类似的应用程序,带有飞出窗口,在遇到一些问题之后我决定摆脱NativeWindows,并在一个无框窗口中做所有事情,就像屏幕大小一样。 每次应用程序启动时,我都会将窗口大小调整为屏幕大小。我设计了一个带按钮和所有内容的自定义标题栏,小部件的主窗口实际上是一个Canvas,我在应用程序的窗口拖了一下。飞出菜单和窗口也是如此:它们只是基于Canvas的组件。 我在窗口的可见区域外拖动组件没有问题,因为它与屏幕相同。
但是,就像我说的那样,做出如此剧烈的改变可能会迟到。
答案 2 :(得分:-1)
这似乎是一个有趣的效果,而不是所有标准的窗口行为。为什么你觉得有必要做任何事情?为什么不让用户自己调整窗口大小?