<?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/