air实现仿QQ提示窗口

 <?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx=" http://www.adobe.com/2006/mxml" 
      applicationComplete="initApplication()"
      layout="absolute"
      verticalAlign="top"
      horizontalAlign="left"
      width="250"
      height="200">
 <mx:Script>
  <![CDATA[
   import flash.net.*
    import flash.events.*
    import flash.display.*
    import mx.events.*
    import mx.controls.*
    import flash.system.*;
   import mx.core.*
    import flash.utils.Timer
    
    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("a.jpg"));//这里先要加载托盘图标的小图片  
    
    this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件  
    
    this.horizontalScrollPolicy=ScrollPolicy.OFF
    this.verticalScrollPolicy=ScrollPolicy.OFF
   }  
   
   //生成托盘  
   
   public function prepareForSystray(event:Event):void{  
    
    dockImage=event.target.content.bitmapData;  
    
    if(NativeApplication.supportsSystemTrayIcon){  
     
     setSystemTrayProperties();//设置托盘菜单的事件  
     
     SystemTrayIcon(NativeApplication.nativeApplication.icon).menu=createSystrayRootMenu();//生成托盘菜单  
     
    }     
    
   }    
   
   //关闭窗体的事件  
   
   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 createSystrayRootMenu():NativeMenu{  
    
    var menu:NativeMenu = new NativeMenu();  
    
    var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("Open");//生成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:NativeWindowDisplayStateEvent):void {  
    
    if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED) {  
     
     displayStateEvent.preventDefault();//阻止系统默认的关闭窗体事件  
     
     dock();//将程序放入托盘  
     
    }  
    
   }  
   
   
   
   //将本地应用程序放到托盘  
   
   public function dock():void {  
    
    stage.nativeWindow.visible = false; //设置本地程序窗体不可见  
    
    NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标  
    
    var mytimer:Timer=new Timer(60000, 0)
    mytimer.addEventListener(TimerEvent.TIMER,timerEvent)
    mytimer.start()
   }  
   
   function timerEvent(e:TimerEvent):void{
    
    undock(null)
    
   }
   
   //还原
   function goback(evt:Event):void{
    
    
    
    
    
   }
   
   //定时提醒
   public function undock(evt:Event):void {  
    
    //NativeApplication.nativeApplication.icon.bitmaps= [];//将托盘图标清空  
    
    this.addEventListener(Event.ENTER_FRAME,Event_ENTER_FRAME)
    
    stage.nativeWindow.width=200
    stage.nativeWindow.height=200
    
    stage.nativeWindow.x=Capabilities.screenResolutionX-stage.nativeWindow.width
    stage.nativeWindow.y=Capabilities.screenResolutionY-stage.nativeWindow.height
    
    myWindow=deChromeWindow(stage.nativeWindow)
    myWindow.visible=true
    
    pan.width= myWindow.width
    pan.height= myWindow.height
    
    pan.x=0
    pan.y=0
    
    pan.title="测试"
    
    pan.addEventListener(CloseEvent.CLOSE,CloseEvent_CLOSE)
    
    
    stage.nativeWindow.visible = true;//设置本地程序窗体可见  
    
    stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端
    
    
   }  
   private function CloseEvent_CLOSE(e:CloseEvent):void{
    
    myWindow.visible=false
    
   }
   var myWindow:NativeWindow
   var num:Number=5
   var timeNum:Number=0
   
   private function Event_ENTER_FRAME(e:Event):void{
    
    //var myWindow:NativeWindow=stage.nativeWindow
    
    if(myWindow.y<Capabilities.screenResolutionY-myWindow.height-50){
     
     myWindow.y-=num
    }else{
     
     timeNum++
    }
    
    
    if(timeNum>100){
     
     myWindow.y-=-num
     
    }
    
    
    if(myWindow.y>Capabilities.screenResolutionY){
     
     timeNum=0
     CloseEvent_CLOSE(null)
     this.removeEventListener(Event.ENTER_FRAME,Event_ENTER_FRAME)
     
     
    }
    
    
    
   } 
   
   //关闭程序窗体  
   private function closeApp(evt:Event):void {  
    
    stage.nativeWindow.close();  
    
   } 
   
   //改变窗体样式    
   public function deChromeWindow(oldWindow:NativeWindow):NativeWindow{
    
    if(oldWindow.systemChrome != NativeWindowSystemChrome.NONE){
     var newOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
     newOptions.systemChrome = NativeWindowSystemChrome.NONE;
     newOptions.transparent = true;
     
     var newWindow:NativeWindow = new NativeWindow(newOptions);
     newWindow.stage.stageWidth = oldWindow.stage.stageWidth;
     newWindow.stage.stageHeight = oldWindow.stage.stageHeight;
     newWindow.stage.align = oldWindow.stage.align;
     newWindow.stage.scaleMode = oldWindow.stage.scaleMode;
     
     newWindow.x=oldWindow.x
     newWindow.y=oldWindow.y
     
     
     
     for(var i:int = 0; i < oldWindow.stage.numChildren; i++){
      newWindow.stage.addChild(oldWindow.stage.getChildAt(i));
     }
     newWindow.activate();
     oldWindow.close();
     
     return newWindow;
    }
    return oldWindow;
   }
   
  ]]>
 </mx:Script>
 <mx:TitleWindow x="0" y="0" width="250" height="200" layout="absolute" id="pan" showCloseButton="true">
 </mx:TitleWindow>
 
</mx:WindowedApplication>

你可能感兴趣的:(air实现仿QQ提示窗口)