flex最小化到系统托盘
2010-07-07 点击:次
- 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);
如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来激活应用程序窗体.
整个流程:
1. 初始化应用时改变系统默认情况下以系统X事件的处理.
2. 定义新处理逻辑(本文是弹出对话框)
3. 生成托盘图标并置于状态栏
4. 给托盘图标加上右键菜单(本文是exit,和open两项)
5. 给菜单加上相应的事件
6. 大功告成
主要方法:
- 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/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];
//设置托盘的图标
}
//激活程序窗体
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();
}
- 上一篇:Flex ArrayCollection详解
- 下一篇:诠释Flash的职业发展道路






