| Adobe AIR |
|
|
管理窗口使用 NativeWindow 类的属性和方法可管理桌面窗口的外观、行为和生命周期。 获取 NativeWindow 实例若要操作窗口,必须首先获取窗口实例。可以从以下任一位置获取窗口实例:
激活、显示和隐藏窗口若要激活窗口,请调用 NativeWindow activate() 方法。激活窗口会将该窗口置于前面,为其提供键盘和鼠标焦点,并在必要时通过还原窗口或将 visible 属性设置为 true 来使其可见。激活窗口不会更改应用程序中其它窗口的顺序。调用 activate() 方法会导致窗口调度 activate 事件。 若要在不激活的情况下显示隐藏窗口,请将 visible 属性设置为 true。此操作使该窗口置于前面,但不会向它分配焦点。 若要从视图中隐藏窗口,请将其 visible 属性设置为 false。隐藏窗口会禁止窗口和任何相关任务栏图标的显示,并且会在 Mac OS X 中禁止 Windows 菜单中条目的显示。 注: 在 Mac OS X 中,不可能完全隐藏具有停靠栏图标的最小化窗口。如果最小化窗口上的 visible 属性设置为 false,则仍然显示该窗口的停靠栏图标。如果用户单击该图标,则会将该窗口还原为可见状态并显示该窗口。
更改窗口显示顺序AIR 提供几种方法来直接更改窗口的显示顺序。可以将窗口的显示顺序向前或向后移动;可以将窗口移动到其它窗口的前面或后面。同时,用户可以通过激活窗口来对窗口进行重新排序。 可以通过将窗口的 alwaysInFront 属性设置为 true 来使该窗口位于其它窗口的前面。如果多个窗口都具有此设置,则这些窗口的显示顺序是它们相互之间的排序顺序,而且它们始终排序在 alwaysInFront 设置为 false 的窗口前面。即使 AIR 应用程序未处于活动状态,最上面组中的窗口也显示在其它应用程序中窗口的前面。由于此行为会阻碍用户查看其它窗口,因此应仅在必要和适当时才能将 alwaysInFront 设置为 true。经调整的使用示例包括:
注: AIR 不强制要求 alwaysInFront 属性的正确使用。但是,如果应用程序打断了用户的工作流,则可能将其传递到同一用户的垃圾桶。
NativeWindow 类提供以下属性和方法来设置一个窗口相对于其它窗口的显示顺序:
注: 如果窗口处于隐藏(visible 为 false)或最小化状态,则调用显示顺序方法无效。
关闭窗口若要关闭窗口,请使用 NativeWindow.close() 方法。 关闭窗口会卸载该窗口的内容,但如果其它对象引用了此内容,则不会破坏内容对象。NativeWindow.close() 方法以异步方式执行,该窗口中包含的应用程序在关闭过程中继续运行。该 close 方法在关闭操作完成时调度 close 事件。从技术角度而言,NativeWindow 对象仍然有效,但访问已关闭窗口上的大多数属性和方法会生成 IllegalOperationError。不能重新打开已关闭窗口。检查窗口的 closed 属性以测试窗口是否已关闭。若要仅从视图中隐藏窗口,请将 NativeWindow.visible 属性设置为 false。 如果 Nativeapplication.autoExit 属性为 true(默认情况),则应用程序在其最后一个窗口关闭后退出。 允许取消窗口操作在窗口使用系统镶边时,可以通过侦听和取消相应事件的默认行为来取消用户与该窗口的交互。例如,在用户单击系统镶边关闭按钮后,将调度 closing 事件。如果任何已注册的侦听器调用了事件的 preventDefault() 方法,则该窗口不会关闭。 在窗口不使用系统镶边时,不会在执行预期更改之前自动调度这些更改的通知事件。因此,如果调用关闭窗口、更改窗口状态的方法,或者设置任何窗口范围属性,则无法取消更改。若要在执行窗口更改前通知应用程序中的组件,则应用程序逻辑可以使用窗口的 dispatchEvent() 方法调度相关的通知事件。 例如,以下逻辑实现窗口关闭按钮的可取消事件处理函数: public function onCloseCommand(event:MouseEvent):void{
var closingEvent:Event = new Event(Event.CLOSING,true,true);
dispatchEvent(closing);
if(!closingEvent.isDefaultPrevented()){
win.close();
}
}
如果侦听器调用事件的 preventDefault() 方法,则 dispatchEvent() 方法返回 false。但是,由于其它原因,它还可以返回 false,因此最好显式使用 isDefaultPrevented() 方法来测试是否应取消更改。 最大化、最小化和还原窗口若要最大化窗口,请使用 NativeWindow maximize() 方法。 myWindow.maximize(); 若要最小化窗口,请使用 NativeWindow minimize() 方法。 myWindow.minimize(); 若要还原窗口(即,使其返回最小化或最大化操作之前的大小),请使用 NativeWindow restore() 方法。 myWindow.restore(); 注: 最大化 AIR 窗口导致的行为与 Mac OS X 标准行为不同。AIR 窗口不是在应用程序定义的“标准”大小和用户最后设置的大小之间切换,而是在应用程序或用户最后设置的大小和屏幕的完整可用区域之间切换。
示例:最小化、最大化、还原和关闭窗口以下简短的 MXML 应用程序演示 Window maximize()、minimize()、restore() 和 close() 方法: <?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical">
<mx:Script>
<![CDATA[
public function minimizeWindow():void
{
this.stage.nativeWindow.minimize();
}
public function maximizeWindow():void
{
this.stage.nativeWindow.maximize();
}
public function restoreWindow():void
{
this.stage.nativeWindow.restore();
}
public function closeWindow():void
{
this.stage.nativeWindow.close();
}
]]>
</mx:Script>
<mx:VBox>
<mx:Button label="Minimize" click="minimizeWindow()"/>
<mx:Button label="Restore" click="restoreWindow()"/>
<mx:Button label="Maximize" click="maximizeWindow()"/>
<mx:Button label="Close" click="closeWindow()"/>
</mx:VBox>
</mx:WindowedApplication>
调整窗口大小和移动窗口在窗口使用系统镶边时,该镶边提供用于调整窗口大小和在桌面范围内移动窗口的拖动控件。如果窗口不使用系统镶边,则必须添加您自己的控件以允许用户调整窗口大小和移动窗口。 注: 若要调整窗口大小或移动窗口,必须首先获取对 NativeWindow 实例的引用。有关如何获取窗口引用的信息,请参阅获取 NativeWindow 实例。
调整窗口大小若要调整窗口大小,请使用 NativeWindow startResize() 方法。如果此方法是从 mouseDown 事件中调用的,则调整大小操作由鼠标驱动并在操作系统收到 mouseUp 事件时完成。在调用 startResize() 时,传入用于指定所调整窗口大小的起始边或角的参数。 舞台的缩放模式确定调整窗口大小时窗口舞台及其内容的行为方式。请记住,舞台缩放模式旨在用于应用程序不控制其显示区大小或高宽比的情况,例如 Web 浏览器。通常,通过将舞台的 scaleMode 属性设置为 StageScaleMode.NO_SCALE 来获得最佳效果。如果希望缩放窗口的内容,则仍然可以设置 scaleX 和 scaleY 参数以响应窗口范围更改。 移动窗口若要移动窗口而不调整其大小,请使用 NativeWindow startMove() 方法。与 startResize() 方法相似,在从 mouseDown 事件调用 startMove() 方法时,移动过程由鼠标驱动并在操作系统收到 mouseUp 事件时完成。 有关 startResize() 和 startMove() 方法的详细信息,请参阅 Flex 3 语言参考 (http://www.adobe.com/go/learn_flex3_aslr_cn)。 示例:调整窗口大小和移动窗口以下示例说明如何对窗口启动调整大小和移动操作: package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.display.NativeWindowResize;
public class NativeWindowResizeExample extends Sprite
{
public function NativeWindowResizeExample():void
{
// Fills a background area.
this.graphics.beginFill(0xFFFFFF);
this.graphics.drawRect(0, 0, 400, 300);
this.graphics.endFill();
// Creates a square area where a mouse down will start the resize.
var resizeHandle:Sprite =
createSprite(0xCCCCCC, 20, this.width - 20, this.height - 20);
resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize);
// Creates a square area where a mouse down will start the move.
var moveHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, 0);
moveHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartMove);
}
public function createSprite(color:int, size:int, x:int, y:int):Sprite
{
var s:Sprite = new Sprite();
s.graphics.beginFill(color);
s.graphics.drawRect(0, 0, size, size);
s.graphics.endFill();
s.x = x;
s.y = y;
this.addChild(s);
return s;
}
public function onStartResize(event:MouseEvent):void
{
this.stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT);
}
public function onStartMove(event:MouseEvent):void
{
this.stage.nativeWindow.startMove();
}
}
}
|