var mainMenu:NativeMenu = new NativeMenu(); 系统托盘:
? 如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来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(); ??
????????} ??
?
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);