第一步:http://rightclickmanager.googlecode.com/下载rightclickmanager-source-lib-0.1.rar并引入自己的FLEX工程,这是实现右键点击事件,及完全屏闭系统右键菜单的关键!

第二步:打开: <主程序名>.template.html 文件,修改为:

 
  
  1. <!--     
  2.     AC_FL_RunContent(     
  3.             "src", "${swf}",     
  4.             "id", "${application}",     
  5.             "name", "${application}",     
  6.             "width", "${width}",     
  7.             "height", "${height}",     
  8.             "align", "middle",     
  9.             "menu", "false",     
  10.             "wmode", "opaque",                  //注意:这里是右键屏蔽的关键     
  11.             "quality", "high",     
  12.             "bgcolor", "${bgcolor}",     
  13.             "allowScriptAccess", "always",     
  14.             "allowNetworking", "all",     
  15.             "allowFullScreen", "true",          //是否可全屏的参数     
  16.             "type", "application/x-shockwave-flash",     
  17.             "pluginspage", "http://www.adobe.com/go/getflashplayer"    
  18.     );     
  19. //-->    

第三步:在主程序文件.as中引入:

import com.siloon.plugin.rightClick.RightClickManager;

并加如下代码:

 
  
  1. [Event(name="rightClick",type="flash.events.ContextMenuEvent")]     
  2. public class index     
  3. {     
  4.     
  5.  protected var rightClickRegisted:Boolean = false;     
  6.     
  7.  public function index()     
  8.  {     
  9.   super();     
  10.     
  11.   if (!rightClickRegisted)     
  12.   {     
  13.    RightClickManager.regist();     
  14.    rightClickRegisted = true;     
  15.   }     
  16.   try    
  17.   {     
  18.    name = NameUtil.createUniqueName(this);     
  19.   }     
  20.   catch (e:Error)     
  21.   {     
  22.   }     
  23.   return;     
  24.     
  25.  }     
  26.     
  27.  public override function toString() : String     
  28.  {     
  29.   return NameUtil.displayObjectToString(this);     
  30.  }    

第四步:在要弹出右键的控件的初始化代码中加入:

NavTabTree.addEventListener(RightClickManager.RIGHT_CLICK,rightClickHandler);

再加以下函数来处理:

 
  
  1. /**    
  2.  * 在控制上单击右键菜单事件的处理函数    
  3.  * @param event 右键事件    
  4.  *     
  5.  */          
  6. protected function rightClickHandler(event:ContextMenuEvent):void    
  7. {     
  8.     onRightClicked(event);     
  9.     removeMenu();     
  10.          
  11.     menu = new Menu();      
  12.     menu = Menu.createMenu(this, createMenuItems(), false);     
  13.     
  14.     menu.labelField="label"      
  15.     menu.variableRowHeight = true;        
  16.     //menu.addEventListener(MenuEvent.ITEM_CLICK, menuItemClickHandler);          
  17.     
  18.     var point:Point = new Point(mouseX,mouseY);     
  19.     point = localToGlobal(point);      
  20.     menu.show(point.x,point.y);      
  21. }     
  22. /**    
  23.  * 如果显示过Menu,则先释放资源    
  24.  *     
  25.  */          
  26. private function removeMenu():void    
  27. {     
  28.     if(menu!=null)     
  29.     {     
  30.         menu.hide();     
  31.         //menu.removeEventListener(MenuEvent.ITEM_CLICK,menuItemClickHandler);     
  32.         menu=null;     
  33.     }     
  34. }     
  35. /**    
  36.  * 创建右键菜单选项    
  37.  * @return 返回选项组成的Array    
  38.  *     
  39.  */          
  40. private function createMenuItems():Array     
  41. {     
  42.     var menuItems:Array = new Array();     
  43.     var menuItem:Object;      
  44.     
  45.     menuItem = new Object;     
  46.     menuItem.label = '清空画布';     
  47.     menuItem.action = 'clearAll';     
  48.     menuItems.push(menuItem);      
  49.     
  50.     menuItem = new Object;     
  51.     menuItem.label = '选择背景';     
  52.     menuItem.action = 'selectBackImage';     
  53.     menuItems.push(menuItem);      
  54.     
  55.     return menuItems;     
  56. }     
  57. /**    
  58.  * 当右键单击Tree的Item时,自动选择鼠标所在的当前项    
  59.  * @param e 自定义右键菜单事件    
  60.  *     
  61.  */    
  62. private function onRightClicked(e:ContextMenuEvent):void    
  63.     
  64. {     
  65.     
  66.     var rightClickItemRender:IListItemRenderer;       
  67.     
  68.     var rightClickIndex:int;     
  69.     
  70.     if(e.mouseTarget is IListItemRenderer) {       
  71.     
  72.         rightClickItemRender = IListItemRenderer(e.mouseTarget);       
  73.     
  74.     }else if(e.mouseTarget.parent is IListItemRenderer) {       
  75.     
  76.         rightClickItemRender = IListItemRenderer(e.mouseTarget.parent);       
  77.     
  78.     }       
  79.     
  80.     
  81.     
  82.     if(rightClickItemRender != null) {       
  83.     
  84.         rightClickIndex = NavTabTree.itemRendererToIndex(rightClickItemRender);       
  85.     
  86.         if(NavTabTree.selectedIndex != rightClickIndex) {       
  87.     
  88.             NavTabTree.selectedIndex = rightClickIndex;      
  89.     
  90.         }      
  91.     
  92.     }       
  93. }    

第五步:

修改RightClickManager.as文件的

static private var rightClickTarget:*;

再修改两个该文件的两个函数:

 
  
  1. static private function mouseOverHandler(event:MouseEvent) : void    
  2. {     
  3.     rightClickTarget = InteractiveObject(event.target);     
  4.     return;     
  5. }     
  6.  
  7. static private function dispatchRightClickEvent() : void    
  8. {     
  9.     var event:ContextMenuEvent;     
  10.     if (rightClickTarget != null)     
  11.     {     
  12.         event = new ContextMenuEvent(RIGHT_CLICK, truefalse, rightClickTarget as InteractiveObject, rightClickTarget as InteractiveObject);     
  13.         rightClickTarget.dispatchEvent(event);     
  14.     }// end if     
  15.     return;     
  16. }    

到这里,功能就完成了,本人修改了RightClickManager的事件从MouseEvent改为ContextMenuEvent是为了能在列表控件DataGrid\Tree\List上点右键时自动选择当前行,使用了ContextMenuEvent事件中的event.mouseTarget和列表控件的IListItemRenderer接口!