2010-04-02 101 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