2009-09-03 102 views

回答

2

好問題。 這將使一個很好的功能請求,一個ContextMenuEvent.MENU_CLOSED事件:)

我想我有你一半的答案。這是我的想法:

var myContextMenu:ContextMenu = new ContextMenu(); 
var menuLabel:String = "Custom Item"; 
var rightClicking:Boolean; 

addCustomMenuItems(); 
myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler); 
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseUpHandler); 
    var redRectangle = makeRedRectangle(); 
    redRectangle.contextMenu = myContextMenu; 


function makeRedRectangle():Sprite{ 
    redRectangle = new Sprite(); 
    redRectangle.graphics.beginFill(0x990000,.2); 
    redRectangle.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
    redRectangle.mouseChildren = false; 
    addChild(redRectangle); 
    return redRectangle; 
} 

function addCustomMenuItems():void { 
    myContextMenu.hideBuiltInItems(); 
    var item:ContextMenuItem = new ContextMenuItem(menuLabel); 
    myContextMenu.customItems.push(item); 
    item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler); 
} 

function menuSelectHandler(event:ContextMenuEvent):void { 
    trace("menuSelectHandler: " + event); 
    rightClicking = true; 
} 

function menuItemSelectHandler(event:ContextMenuEvent):void { 
    trace("menuItemSelectHandler: " + event); 
} 

function mouseUpHandler(event:MouseEvent):void{ 
    if(rightClicking){ 
     trace('ContextMenu Closed\nThank You! Come Again!'); 
     rightClicking = false; 
    } 
} 

基本上我創建的一切上面的一個精靈,但已mouseChildren設置爲false,所以剪輯怒吼咆哮,可以得到的點擊次數。你可能想要讓這個透明。我使用這個,所以當你點擊它時,你會得到一個事件。當發生這種情況時,我將rightClicking設置爲true,意思是,我知道按下了右鍵,我只是在等待其他事情發生。有兩種選擇:

  1. 用戶從菜單中選擇一個項目。
  2. 用戶單擊以使菜單消失。

對於選項1,如果用戶選擇了您的任何自定義項目,那很酷,如果沒有,至少您知道會發生什麼。 對於選項2,我設置了MOUSE_DOWN事件的偵聽器,因此如果rightClicking已打開,並且鼠標向下,那麼菜單關閉。

希望這會有所幫助!

我知道,它看起來像哈克老同學AS2,代碼從文檔的例子,改裝,但它有一個想法:)