Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方

<?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" currentState="loginState" initialize="initApplication()" xmlns:com="com.*">
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
 </fx:Declarations>
 <s:states>
  <s:State name="loginState"/>
  <s:State name="mainState"/>
 </s:states>

 <fx:Script>
  <![CDATA[
   import mx.controls.Alert;
   import mx.events.CloseEvent;
   import mx.events.FlexEvent;
   
   import spark.components.supportClasses.Range;
   
   [Bindable]
   private var aaa:Number ;
  
   private function handleMenuClick(event:Event):void
   {
    var select:String = event.target.label;
    if(select =="最小化")
    {
     this.minimize();
    }
    if(select =="最大化")
    {
     this.maximize();
    }
    if(select =="还原")
    {
     this.restore();
    }
    if(select == "关闭")
    {
     this.close();
    }
   }

   

   //////////////////////////////////////////////
   private var dockImage:BitmapData;   
   
                  
   
           //初始化Application里调用此方法,完成上面的第一步:   
   
               public function initApplication():void{   
    
                    var loader:Loader=new Loader();   
    
                    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制   
    
                    loader.load(new URLRequest("assets/vm.png"));//这里先要加载托盘图标的小图片   
    
                    this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件   
        
        
        this.maximize();
        //////
        var mainMenu:NativeMenu = new NativeMenu();
        var minimizeMenu:NativeMenuItem = new NativeMenuItem("最小化");
        var maximizeMenu:NativeMenuItem = new NativeMenuItem("最大化");
        var sepMenu:NativeMenuItem = new NativeMenuItem("",true);
        var restoreMenu:NativeMenuItem = new NativeMenuItem("还原");
        var closeMenu:NativeMenuItem = new NativeMenuItem("关闭");
        minimizeMenu.addEventListener(Event.SELECT, handleMenuClick);
        maximizeMenu.addEventListener(Event.SELECT, handleMenuClick);
        restoreMenu.addEventListener(Event.SELECT, handleMenuClick);
        closeMenu.addEventListener(Event.SELECT, handleMenuClick);
        mainMenu.addItem(minimizeMenu);
        mainMenu.addItem(maximizeMenu);
        mainMenu.addItem(sepMenu);
        mainMenu.addItem(restoreMenu);
        mainMenu.addItem(closeMenu);
        this.contextMenu=mainMenu;
    
                }   
   
                  
   
           //关闭窗体的事件   
   
               public function closingApplication(event:Event):void{   
    
                    event.preventDefault();//阻止默认的事件   
    
                    Alert.yesLabel="关闭";   
    
                    Alert.noLabel="最小化";   
    
                    Alert.show("关闭或最小化?", "关闭?", 3, this, alertCloseHandler);//弹出自定义的选择框, 关于Alert的详细用法,参考官方文档或我前面的相关文章.   
    
                }   
   
           //根据用户的选择来判断做什么,这里选择是就是关闭,选择否(Mini)就是最小化到托盘.   
   
           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 = "TurboSquid squidword";   
    
                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 dock():void {   
    
                stage.nativeWindow.visible = false; //设置本地程序窗体不可见   
    
                NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标   
    
            }   
   
              
   
           //激活程序窗体   
   
           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();   
    
            }   
   
     
/////////////////////////////////////////////////////////////////////////
  ]]>
 </fx:Script>
 <mx:TabNavigator includeIn="mainState" id="appModules" doubleClickEnabled="true" top="0" bottom="0" left="0" right="0" cornerRadius="2" tabOffset="5" dropShadowVisible="false" >
 </mx:TabNavigator>
 <mx:Form x="132" y="151" id="login" verticalCenter="0" horizontalCenter="0" includeIn="loginState">
  <mx:FormHeading label="Login"/>
  <mx:FormItem label="Name">
   <s:TextInput id="username"/>
  </mx:FormItem>
  <mx:FormItem label="PassWord" >
   <s:TextInput  id="password" displayAsPassword="true"/>
  </mx:FormItem>
  <mx:FormItem>
   
  </mx:FormItem>
 </mx:Form>
 <mx:HSlider includeIn="loginState" top="100" left="100" thumbCount="2">
  
 </mx:HSlider>
 <com:data id="my"  verticalCenter="0" horizontalCenter="0"  includeIn="mainState" width="100%" height="100%" top="0" left="0" right="0"/>
 
</s:WindowedApplication>


转载:http://wangjianchao-hb.blog.163.com/blog/static/171188092010320105916839/

你可能感兴趣的:(Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方)