关于AIR托盘

该段代码实现了AIR应用程序生成任务栏图标,单击图标将应用程序激活并弹出在桌面的最上层。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initApplication()">
<mx:Script>
<![CDATA[
import flash.display.*;
import flash.net.URLRequest;
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.core.WindowedApplication;

private var dockImage:BitmapData;
private var MainStage:WindowedApplication;
//初始化Application里调用此方法,完成上面的第一步:
public function initApplication():void{
var loader:Loader=new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制
loader.load(new URLRequest("http://docs.google.com/locales/zh/CN/images/editor_docsslogo.gif"));//这里先要加载托盘图标的小图片
}

//生成托盘
public function prepareForSystray(event:Event):void{
dockImage=event.target.content.bitmapData;
if(NativeApplication.supportsSystemTrayIcon){
setSystemTrayProperties();//设置托盘菜单的事件

}
}

/**
* Windows系统设置系统栏图标,属性
*
*/
private function setSystemTrayProperties():void{
var icon : SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
icon.tooltip = "TurboSquid squidword";
icon.addEventListener(MouseEvent.CLICK, undock);
stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, displayStageChangeHandler);

stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, function (e : Event) : void {
trace(1);
});
}

/**
* 最小化
*
*/
private function displayStageChangeHandler(event:NativeWindowDisplayStateEvent):void
{
trace("before"+event.beforeDisplayState);
trace("after"+event.afterDisplayState);
if(event.afterDisplayState == NativeWindowDisplayState.MINIMIZED)
{
//event.preventDefault();
dock();
}
}

public function dock():void{
stage.nativeWindow.visible = false;

NativeApplication.nativeApplication.icon.bitmaps=[dockImage];
}


//激活程序窗体
public function undock(evt:Event):void {
stage.nativeWindow.visible = true;//设置本地程序窗体可见
trace(stage.nativeWindow.displayState);
//stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端
NativeApplication.nativeApplication .icon.bitmaps = [];//将托盘图标清空
}
]]>
</mx:Script>

</mx:WindowedApplication>

总结1:当应用程序的显示状态(最大化,最小化,正常等)发生改变里会触发NativeWindowDisplayStateEvent事件,该事件有两个常量,一个是DISPLAY_STATE_CHANGE ,一个是DISPLAY_STATE_CHANGING,CHANGING是指状态正在改变,CHANGE是状态已经改变完成,所以NativeWindowDisplayStateEvent.preventDefault应该写在DISPLAY_STATE_CHANGING事件机制中,如果写在DISPLAY_STATE_CHANGE事件机制里,再执行最小化,将会出现这样一种状况,桌面将会出现该应用程序的任务栏图标及停靠图标。然后在激活应用程序的过程中,stage.nativeWindow.orderToFront()方法不起作用,原因就在于orderToFront/Back...等等方法在应用程序处于隐藏及最小化的状态下无效。这个时候的应用程序就处于最小化状态。如果不写orderToFront()方法应用程序还原时就会还原到当初最小化的时候在桌面所处的层次。使用orderTo...决定程序的深度。
总结2:想要修改一段代码,可能需要将其还原到原来的状态,这个时候先拷贝一份,再在拷贝上修改,这样会方便很多,还有就是增加代码的可读性


有高手指导就是好啊~~~~~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值