23.3.打开和管理本地窗体

23.3.1.问题
我想在AIR程序中创建本地窗体
23.3.2.解决办法
使用flash.display.NativeWindow 和mx.core.Window 类
23.3.3.讨论
你可以依照操作系统的约定创建本地窗体,不仅仅是它们的功能还有它们的外观。而且除了可以轻松创建和其他桌面程序一样的外观和矩形形状的本地窗体,还可以通过style属性和自定义图像创建自定义皮肤,自定义窗体仍拥有操作窗口的控件,通过这些控件可以监听本地窗体发出的事件。

AIR程序的MXML主标签为<mx:WindowedApplication>,这个在程序运行后就是程序的初始窗口。通过应用程序描述文件可进行自定义设置或者直接在<mx:WindowedApplication>标签内申明。WindowedApplication窗口扮演者作为flash.display.NativeWindow 类实例的容器,让你可直接在MXML 中添加Flex 组件到显示列表。你可通过nativeWindow 属性访问NativeWindow实例。

NativeWindow类扮演者一个接口,用于控制本地桌面窗口。要通过Flex Framework创建本地窗口,可用mx.core.Window类实例创建,就像WindowedApplication类,Window类扮演者底层本地窗口实例的容器,可通过nativeWindow属性访问,window的初始化属性可在根标签<mx:Window>中进行设置。

下面的例子是一个继承自Window类的自定义本地窗口:
+展开
-XML
<mx:Window xmlns:mx="http://www.adobe.com/2006/mxml"
title="Hellowidth="200height="200">

<mx:Label text="I am a Window!" />
</mx:Window>

当打开时,窗口将被显示在桌面上,大小为宽200,高200,窗口标题栏显示Hello,其他窗口的chrome 和transparency属性可在<mx:Window>标签中设置,以及NativeWindow实例的事件处理函数。下面的例子删除标准系统样式,约束窗口最大化和最小化控件,添加窗体控件的事件监听器:
+展开
-XML
<mx:Window xmlns:mx="http://www.adobe.com/2006/mxml"
title="HellosystemChrome="nonetransparent="true"
maximizable="falseminimizable="false"
width="200height="200"
windowComplete="completeHandler();"
closing="closingHandler(event);">

<mx:Script>
<![CDATA[
private
function completeHandler():void {
nativeWindow.addEventListener(NativeWindowBoundsEvent.RESIZING,resizeHandler );
}
private function resizeHandler(evt:NativeWindowBoundsEvent):void{
trace( evt.beforeBounds + ":"+ evt.afterBounds );
}
private function closingHandler( evt:Event ):void{
trace( "goodbye!");
}

]]>
</mx:Script>
<mx:Label text="I am a Window!" />
</mx:Window>

当窗口打开后,窗体样式被替换为标准的Flex样式,且禁止了最大化和最小化控件,事件处理器响应NativeWindow实例发出的creation, resizing, 和closing事件。

API中包含一些选项用于设置本地窗体类型。这些类型属性值在NativeWindowTypes类中, 窗体被认为是由自定义边框和控件组成,默认,一个窗体的类型为normal。utility 和lightweight类型不能显示在Windows操作系统的任务栏或Mac OS X 菜单中。Utility窗体被认为是精简的normal 窗体, 因为它只有简单的边框和一个关闭按钮,Lightweight窗体需要一个systemChrome属性设置为false,它的行为像一个通知窗口,就像其他桌面程序的信息通知窗口那样。

标题栏,状态栏和resizing处理都可通过<mx:Window> 组件的showTitleBar, showStatusBar,和showGripper属性进行设置。要想删除标准的Flex边框,只要把<mx:Window> 标签的showflexChrome 属性设为false,这样窗体只显示内容而没有标准的系统边框控件;在这个例子中只显示文本I am a Window! 而没有任何背景或窗体边框。

要显示一个<mx:Window>组件,你首先要创建window实例并调用open方法:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="verticalwindowComplete="initHandler();closing="closeHandler();">

<mx:Script>
<![CDATA[
import com.oreilly.flexcookbook.CustomWindow;
private var window:CustomWindow;
private function initHanlder():void {
window = new CustomWindow();
window.alwaysInFront = true ;
window.open();
}
private function closeHandler():void {
if ( !window.closed ) window.close();
}

]]>
</mx:Script>
</mx:WindowedApplication>

当程序完成初始化布局并打开底层NativeWindow实例,windowComplete事件被触发,initHandler方法被调用。在initHandler方法内,CustomWindow 实例被创建并打开。设置alwaysInFront 属性窗口被锁定在Z 轴最上层, 当然你也可以自己使用Window 类的orderInFrontOf, orderInBackOf, orderToFront 和orderToBack 方法自己设置。

需要注意的是,当关闭主应用程序窗口之前,关闭其他自定义窗口都不会导致主窗口关闭,closing事件监听器的目的就是退出程序确定所有的窗口要关闭。

加支付宝好友偷能量挖...


评论(0)网络
阅读(111)喜欢(0)flash/flex/fcs/AIR