这个文档现在仅仅是个小测试的例子,只实现了系统托盘和托盘的右键菜单:
首先在初始化界面的方法中要用到Loader类来加载图片,再注册两个事件,一个关键的是对托盘的生成和菜单的控制 ;第二个时间是注册关闭的事件,在这个事件的方法中首先要屏蔽系统默认的关闭,再编写供选择的对话框:
菜单不难,做过java Swing的人都会,原理写法都是一样的。关闭的时候也只有两部,一是隐藏当前的窗体,二是把图标加载进来。说也说不大清楚,直接看代码,带注释,很清楚。
源代码:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="initApplication(event)"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.events.CloseEvent; import mx.events.FlexEvent; private var dockImage:BitmapData; protected function initApplication(event:FlexEvent):void { var loader:Loader = new Loader(); //这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制 loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray); //这里先要加载托盘图标的小图片 loader.load(new URLRequest("users.png")); this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件 } //关闭窗体的事件 public function closingApplication(event:Event):void { //阻止默认的事件 event.preventDefault(); Alert.yesLabel="退出"; Alert.noLabel="最小化"; //弹出自定义的选择框,关于Alert的详细用法,参考官方文档或我前面的相关文章. Alert.show("退出或者最小化到托盘","退出?",3,this,alertCloseHandler); } //根据用户的选择来判断做什么,这里选择是就是关闭,选择否(最小化)就是最小化到托盘. private function alertCloseHandler(event:CloseEvent):void { if(event.detail==Alert.YES){ closeApp(event); }else{ dock();//最小化到托盘 } } //生成托盘 public function prepareForSystray(event:Event):void { dockImage=event.target.content.bitmapData; if(NativeApplication.supportsSystemTrayIcon){ setSystemTrayProperties();//设置托盘菜单的事件 SystemTrayIcon(NativeApplication.nativeApplication.icon).menu=createSystrayRootMenu();//生成托盘菜单 } } public function createSystrayRootMenu():NativeMenu{ var menu:NativeMenu = new NativeMenu(); var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("还原");//生成OPEN菜单项 var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("退出");//同理 openNativeMenuItem.addEventListener(Event.SELECT,undock); exitNativeMenuItem.addEventListener(Event.SELECT,closeApp);//添加EXIT菜单项事件 menu.addItem(openNativeMenuItem); menu.addItem(new NativeMenuItem("",true));//separator menu.addItem(exitNativeMenuItem);//将菜单项加入菜单 return menu; } //设置托盘图标的事件 private function setSystemTrayProperties():void{ SystemTrayIcon(NativeApplication.nativeApplication .icon).tooltip = "Fly_AIR之托盘"; SystemTrayIcon(NativeApplication.nativeApplication .icon).addEventListener(MouseEvent.CLICK,undock); stage.nativeWindow.addEventListener(NativeWindowdisplayStateEvent.disPLAY_STATE_CHANGING,nwMinimized); } //最小化窗体 private function nwMinimized(displayStateEvent:NativeWindowdisplayStateEvent):void { if(displayStateEvent.afterdisplayState == NativeWindowdisplayState.MINIMIZED) { displayStateEvent.preventDefault();//阻止系统默认的关闭窗体事件 dock();//将程序放入托盘 } } //激活程序窗体 public function undock(evt:Event):void { stage.nativeWindow.visible = true;//设置本地程序窗体可见 stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端 NativeApplication.nativeApplication .icon.bitmaps = [];// 将托盘图标清空 } //关闭程序窗体 private function closeApp(evt:Event):void { stage.nativeWindow.close(); } //将本地应用程序放到托盘 public function dock():void { stage.nativeWindow.visible = false; //设置本地程序窗体不可见 NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标 } ]]> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> </s:WindowedApplication>