Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方法- - JavaEye技术网站

右键菜单:


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();??

??????? }??

郑重声明:资讯 【Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方法- - JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——