右键菜单:
var mainMenu:NativeMenu = new NativeMenu();
var minimizeMenu:NativeMenuItem = new NativeMenuItem("Minimize");
var maximizeMenu:NativeMenuItem = new NativeMenuItem("Maximize");
var sepMenu:NativeMenuItem = new NativeMenuItem("",true);
var restoreMenu:NativeMenuItem = new NativeMenuItem("Restore");
var closeMenu:NativeMenuItem = new NativeMenuItem("Close");
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;
系统托盘:
var sysTray:SystemTrayIcon =
?? NativeApplication.nativeApplication.icon as SystemTrayIcon;
?? sysTray.tooltip = "测试tray";
?? //
?? sysTray.menu = this.contextMenu;
?? sysTray.addEventListener(MouseEvent.CLICK,trayClick);
?
如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来xx应用程序窗体.
整个流程:
1.?????? 初始化应用时改变系统默认情况下以系统X事件的处理.
2.?????? 定义新处理逻辑(本文是弹出对话框)
3.?????? 生成托盘图标并置于状态栏
4.?????? 给托盘图标加上右键菜单(本文是exit,和open两项)
5.?????? 给菜单加上相应的事件
6.?????? 大功告成
?
主要方法:
?
private var dockImage:BitmapData;??
??????????????
??????? //初始化Application里调用此方法,完成上面的{dy}步:??
??????????? public function initApplication():void{??
??????????????? var loader:Loader=new Loader();??
??????????????? loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成{dy}步的任务须,这个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).menu=createSystrayRootMenu();//生成托盘菜单??
??????????? }?????
??????? }??
??????????
??????? 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];//设置托盘的图标??
??????? }??
??????????
??????? //xx程序窗体??
??????? 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();??
??????? }??