现在的位置: 首页 > 综合 > 正文

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

2013年07月26日 ⁄ 综合 ⁄ 共 3666字 ⁄ 字号 评论关闭

 

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

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

 

抱歉!评论已关闭.