用户名:
密码:
    自动登录  忘记密码  

您的位置:超越EBIBI   技术经验分享   flex最小化到系统托盘

泡泡熊
Flash/Flex构架师 / 广东
积分 76

flex最小化到系统托盘


2010-07-07 点击:



  1. var mainMenu:NativeMenu = new NativeMenu();  
  2. var minimizeMenu:NativeMenuItem = new NativeMenuItem("Minimize");  
  3. var maximizeMenu:NativeMenuItem = new NativeMenuItem("Maximize");  
  4. var sepMenu:NativeMenuItem = new NativeMenuItem("",true);  
  5. var restoreMenu:NativeMenuItem = new NativeMenuItem("Restore");  
  6. var closeMenu:NativeMenuItem = new NativeMenuItem("Close");  
  7. minimizeMenu.addEventListener(Event.Select, handleMenuClick);  
  8. maximizeMenu.addEventListener(Event.Select, handleMenuClick);  
  9. restoreMenu.addEventListener(Event.Select, handleMenuClick);  
  10. closeMenu.addEventListener(Event.Select, handleMenuClick);  
  11. mainMenu.addItem(minimizeMenu);  
  12. mainMenu.addItem(maximizeMenu);  
  13. mainMenu.addItem(sepMenu);  
  14. mainMenu.addItem(restoreMenu);  
  15. mainMenu.addItem(closeMenu);  
  16. this.contextMenu=mainMenu

系统托盘:

  1.  
  2. var sysTray:SystemTrayIcon =   
  3.    NativeApplication.nativeApplication.icon as SystemTrayIcon;   
  4.    sysTray.tooltip = "测试tray";  
  5.    //  
  6.    sysTray.menu = this.contextMenu;  
  7.    sysTray.addEventListener(MouseEvent.CLICK,trayClick);   
  8.  

如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来激活应用程序窗体.

整个流程:

1.       初始化应用时改变系统默认情况下以系统X事件的处理.

2.       定义新处理逻辑(本文是弹出对话框)

3.       生成托盘图标并置于状态栏

4.       给托盘图标加上右键菜单(本文是exit,和open两项)

5.       给菜单加上相应的事件

6.       大功告成

主要方法:

  1. private  var dockImage:BitmapData;
     //初始化Application里调用此方法,完成上面的第一步:
       public  function initApplication(): void {
       var 
    loader:Loadernew  Loader();
       loader.contentLoaderInfo.addEventListener
    (Event.COMPLETE,prepareForSystray);
       //这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制
       loader.load( new  URLRequest( "assets/images/32.png" ));
      //这里先要加载托盘图标的小图片
       this .addEventListener(Event.CLOSING,closingApplication);
    //设置关闭体的事件
                       }
       //关闭窗体的事件
       public  function closingApplication(event:Event): void {
       event.preventDefault(); //阻止默认的事件
       
    Alert.yesLabel"Close" ;
       
    Alert.noLabel"Mini" ;
       Alert.show( "Close or Minimize?" ,
    "Close?" ,  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)
    .
  2. menu=createSystrayRootMenu();
  3.  //生成托盘菜单
                       }
                      }
            public  function createSystrayRootMenu():NativeMenu{
        var 
    menu:NativeMenu =  new  NativeMenu();
        var 
    openNativeMenuItem:NativeMenuItem =  new  NativeMenuItem( "Open" );
  4.  //生成OPEN菜单项
        var 
    exitNativeMenuItem:NativeMenuItem =  new  NativeMenuItem( "Exit" );
     //同理
        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:
  5. 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 = [];
    //将托盘图标清空
  6.                }
                                   //关闭程序窗体
                    private  function closeApp(evt:Event): void  {

                       stage.nativeWindow.close();

                   }
           
     

 


    泡泡熊 版权所有
    禁止任何用途(禁止转载、商用和个人使用)


所属分类:技术经验分享

本文标签:flex 系统托盘

各位正在潜水的同学请注意,有0位无聊人士 在EBIBI附近出没!







点击我更换图片 看不清
评论内容 (*必填):

(Ctrl + Enter 快速提交)