首页 > 网站 > WEB开发 > 正文

23.4.创建本地菜单

2024-04-27 13:52:32
字体:
来源:转载
供稿:网友
23.4.1.问题
我想提供一个本地菜单供用户执行特殊的命令。
23.4.2.解决办法
使用本地的菜单API 创建程序和窗体菜单。
23.4.3.讨论
本地菜单API类提供了操作系统本地菜单的相关特性。你可以添加菜单项以及监听菜单项选择事件。有好几种本地菜单类型,如何创建和交互这取决于你的AIR程序所运行的操作系统,因此你添加菜单时要确认是否支持所有目标操作系统。

Mac OS X操作系统支持应用程序菜单。应用程序菜单是个全局菜单,可被程序工具栏所访问,且不依赖于当前获得焦点的本地窗口。应用程序菜单是MAC OS X操作系统自动创建的,你可以往上面添加菜单项或子菜单以及事件处理器,成为标准菜单。

Windows操作系统支持的本地菜单本认为是窗体菜单。Window菜单显示在本地窗体对象上,刚好在标题栏下面,且只支持具有系统边框的本地窗体,因此当<mx:Window>实例的systemChrome属性被设为none时Window菜单是不能被添加进去的。

要检测AIR 程序运行在什么操作系统上, 你可以使用NativeWindow.supportsMenu 和
+展开
-ActionScript
NativeApplication.supportsMenu属性:
if( NativeWindow.supportsMenu )
{
// Windows
}
else if( NativeApplication.supportsMenu )
{
// Mac OS X
}

如果NativeWindow.supportsMenu属性值为true,运行在Windows操作系统下的程序具有本地窗口菜单。flash.desktop.NativeApplication类提供程序级信息和函数,其中有个静态的supportsMenu属性。如果NativeApplication对象支持程序级菜单,则说明当前运行在Mac OS X环境中。

要添加本地菜单对象作为根菜单,可先实例化NativeMenu,并赋值给NativeWindow或NativeApplication实例的menu属性:
+展开
-ActionScript
if( NativeWindow.supportsMenu )
{
stage.nativeWindow.menu = new NativeMenu();
}
else if( NativeApplication.supportsMenu )
{
NativeApplication.nativeApplication.menu = new NativeMenu();
}

设置好根菜单后,接着就可以添加菜单或子菜单到NativeMenu对象上了。下面的例子在<mx:WindowedApplication>上创建一个应用程序菜单或窗体菜单,这取决在什么操作系统上:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="verticalwindowComplete="initHandler();">

<mx:Script>
<![CDATA[
private function initHandler():void {
var fItem:NativeMenuItem = new NativeMenuItem( "File");
var fileMenu:NativeMenuItem;
if( NativeWindow.supportsMenu ){
stage.nativeWindow.menu = new NativeMenu();
fileMenu = stage.nativeWindow.menu.addItem( fItem);
}
else if( NativeApplication.supportsMenu ){
NativeApplication.nativeApplication.menu = new NativeMenu();
fileMenu = NativeApplication.nativeApplication.menu.addItem( fItem );
}
fileMenu.submenu = createFileMenu();
}
private function createFileMenu():NativeMenu {
var menu:NativeMenu = new NativeMenu();
var openItem:NativeMenuItem = new NativeMenuItem( "Open");
var openCmd:NativeMenuItem = menu.addItem( openItem);
openCmd.addEventListener( Event.SELECT, openHandler);
var saveItem:NativeMenuItem =new NativeMenuItem( "Save");
var saveCmd:NativeMenuItem = menu.addItem( saveItem);
saveCmd.addEventListener( Event.SELECT, saveHandler);
return menu;
}
private function openHandler( evt:Event ):void {
printOut.text += "You selected open./n";
}
private function saveHandler( evt:Event ):void{
printOut.text += "You selected save./n";
}

]]>
</mx:Script>
<mx:TextArea id="printOutwidth="100%height="100%" />
</mx:WindowedApplication>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表