阅读:1293次   评论:1条   更新时间:2011-05-26    

SmartInvoke屏蔽了Flash中的系统内置右键,添加了系统本地右键菜单功能。只需几段代码就可以创建出本地右键菜单。右键菜单主要用到以下四个类:

cn.smartinvoke.gui.control.CAction;           

菜单项信息类,封装了菜单项的id,菜单项的显示文字,菜单项的图标,菜单项类型等信息。

cn.smartinvoke.gui.control.CNativeMenuBuilder

本地菜单类,该对象表示一个菜单。他由菜单项CActionCMenuRelation组成。

cn.smartinvoke.gui.module.CActionEvent;

菜单的点击事件类,单用户点击了某个菜单项后,smartinvoke就会派发这个事件。

cn.smartinvoke.gui.CContextMenuManager

菜单管理器,用户不能单独创建该类,该类是SIApplication对象的成员,管理着当前窗口总的所有菜单对象。每个菜单都要与某个显示控件相关联,不可能独立存在,所以菜单管理器在这里还维护这菜单与显示控件的关联关系。

cn.smartinvoke.gui.module.CMenuRelation;

菜单项组织者,该对象将多个菜单项组织成一个菜单。然后通过CContextMenuManager与指定控件关联。

下面我们就来简单的实现一个本地菜单。在First_项目的FirstWin.mxmlinit方法中增加如下内容:

            

  //菜单的实现

               //构造三个菜单项

               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类的addActionaddMenuItem两个方法动态的添加一菜单项到菜单对象中。

 

addAction(cAction:CAction):void       作用为添加一菜单项实体对象。

addMenuItem(actionId:String, path:String):void 将菜单项添加到菜单path所指定的显示位置上,这里的pathCMenuRelation对象的label属性加反斜杠/组成。比如在下图所示的菜单中:



 

 

菜单项全屏的path为空字符串,菜单项:简体中文(GB18030)path为:字符编码(C),菜单项:东亚 path为:字符编码(C)/自动检测(A)

 

也可以调用CNativeMenuBuilder类的removeMenuItem(actionId:String, path:String):void方法删除指定位置上的菜单项。

当然CNativeMenuBuilder类还有设置菜单项状态,菜单项显示文字等方法,请参考中文API

 

注意:

在Java项目部分将eclipse安装目录下的org.eclipse.core.commands这个jar添加进编译路径上去,不然右键菜单会出错。这是开发工具的一个小bug

评论 共 1 条 请登录后发表评论
1 楼 jzzwy 2012-01-01 23:06
一直运行不起来就是没添加org.eclipse.core.commands

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics