微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flex AIR 系统托盘于右键托盘菜单的实现

 

这个文档现在仅仅是个小测试的例子,只实现了系统托盘和托盘的右键菜单

首先在初始化界面的方法中要用到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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐