拖动时调整AIR应用程序窗口的大小

时间:2010-04-02 21:05:42

标签: flash actionscript-3 air desktop-application

所以我注意到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()”从未运行。

为什么?

3 个答案:

答案 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)

这似乎是一个有趣的效果,而不是所有标准的窗口行为。为什么你觉得有必要做任何事情?为什么不让用户自己调整窗口大小?