SmartInvoke屏蔽了Flash中的系统内置右键,添加了系统本地右键菜单功能。只需几段代码就可以创建出本地右键菜单。右键菜单主要用到以下四个类: cn.smartinvoke.gui.control.CAction; 菜单项信息类,封装了菜单项的id,菜单项的显示文字,菜单项的图标,菜单项类型等信息。 cn.smartinvoke.gui.control.CNativeMenuBuilder 本地菜单类,该对象表示一个菜单。他由菜单项CAction与CMenuRelation组成。 cn.smartinvoke.gui.module.CActionEvent; 菜单的点击事件类,单用户点击了某个菜单项后,smartinvoke就会派发这个事件。 cn.smartinvoke.gui.CContextMenuManager 菜单管理器,用户不能单独创建该类,该类是SIApplication对象的成员,管理着当前窗口总的所有菜单对象。每个菜单都要与某个显示控件相关联,不可能独立存在,所以菜单管理器在这里还维护这菜单与显示控件的关联关系。 cn.smartinvoke.gui.module.CMenuRelation; 菜单项组织者,该对象将多个菜单项组织成一个菜单。然后通过CContextMenuManager与指定控件关联。 下面我们就来简单的实现一个本地菜单。在First_项目的FirstWin.mxml的init方法中增加如下内容:
- //菜单的实现
- //构造三个菜单项
- var act1:CAction=new CAction("action1","菜单一");//action1为第一个菜单项的id
- var act2:CAction=new CAction("action2","第二个菜单");
- var act3:CAction=new CAction("about","关于smartinvoke");
- //构造菜单对象
- var menu:CNativeMenuBuilder=new CNativeMenuBuilder(this.shell);
- //将菜单项数组传递给菜单对象
- menu.initAction([act1,act2,act3]);
- //组织菜单项之间的关系
- var subRel:CMenuRelation=new CMenuRelation();
- subRel.actions=[act2.actionId];
- subRel.label="子菜单";
- var rel:CMenuRelation=new CMenuRelation();
- rel.actions=[act1.actionId,subRel,"-",act3.actionId];
-
- menu.initMenu(rel);
- //添加事件监听器
- menu.addListener(function (evt:CActionEvent):void{
- this.labelInfo.text="您点击了菜单"+evt.actionId+" 菜单路径:"+evt.path;
- },this);
-
- //将当前创建的菜单,关联到当前SIApplication应用程序对象上,
- //当然你可以关联到任何InteractiveObject类型对象上
- this.contextMenuManager.addNativeMenu(this,menu);
复制代码
当然我们也可以通过调用CNativeMenuBuilder类的addAction与addMenuItem两个方法动态的添加一菜单项到菜单对象中。
addAction(cAction:CAction):void 作用为添加一菜单项实体对象。 addMenuItem(actionId:String, path:String):void 将菜单项添加到菜单path所指定的显示位置上,这里的path由CMenuRelation对象的label属性加反斜杠/组成。
菜单项全屏的path为空字符串,菜单项:简体中文(GB18030)的path为:字符编码(C),菜单项:东亚 的path为:字符编码(C)/自动检测(A)
也可以调用CNativeMenuBuilder类的removeMenuItem(actionId:String, path:String):void方法删除指定位置上的菜单项。 当然CNativeMenuBuilder类还有设置菜单项状态,菜单项显示文字等方法,请参考中文API。
|