NativeMenu ContextMenuEvent

发表评论 阅读评论

今天群里朋友问,A B C D多个显示对象有同一个NativeMenu菜单,怎么知道是哪个显示对象弹出的菜单?
首先想到的是NativeMenu有Event.DISPLAYING事件,可是具体是哪个显示对象就不好弄了,
然后想,如果只是相同的菜单显示,而用不同的NativeMenu可以用闭包函数实现,O(∩_∩)O~
可是那位朋友说用闭包不适合的,o(╯□╰)o
又有朋友说用ContextMenuEvent.MENU_SELECT试试,我想NativeMenu没有ContextMenuEvent事件的,怎么能用呢。
先试下再说了, 没想到果然ok的,郁闷了,API上说NativeMenu没有ContextMenuEvent事件的啊, 莫非我的API有误?describeType 看下,晕倒,也没ContextMenuEvent事件的。
然后测试NativeWidow.menu,不会触发ContextMenuEvent事件,
然后猜想,可能InteractiveObject的contextMenu会自动添加ContextMenuEvent.MENU_SELET事件。

结论:InteractiveObject的contextMenu会自动添加ContextMenuEvent.MENU_SELET事件,而不管是不是ContextMenu

下面是测试代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
     creationComplete="init()" width="600" height="300">

    <mx:Script>
        <![CDATA[
            import flash.utils.describeType;
            private function init():void
            {
                // NativeMenu
                var menu:NativeMenu = new NativeMenu();
                var menuItem:NativeMenuItem = new NativeMenuItem("litefeel.com");
                menu.addItem(menuItem);
                menu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler);

                // Canvas 添加 NativeMenu 菜单
                canvas.contextMenu = menu;

                // Sprite 添加 NativeMenu 菜单
                var sprite:Sprite = new Sprite();
                sprite.graphics.beginFill(0xFFFFFF, 1);
                sprite.graphics.drawRect(0, 0, 50, 50);
                sprite.graphics.endFill();
                sprite.contextMenu = menu;
                ui.addChild(sprite);

                // NativeWindow 添加 NativeMenu菜单
                var nativeMenuItem:NativeMenuItem = new NativeMenuItem("lite3");
                nativeMenuItem.submenu = menu;
                this.nativeWindow.menu = new NativeMenu();
                this.nativeWindow.menu.addItem(nativeMenuItem);
            }

            // 菜单选择侦听器
            private function menuSelectHandler(e:ContextMenuEvent):void
            {
                trace("this is menuSelectHandler!");
                trace("e.target = ", e.target);
                trace("e.mouseTarget = ", e.mouseTarget);
            }
        ]]>
    </mx:Script>
    <mx:UIComponent id="ui"/>
    <mx:Canvas x="302" y="36" id="canvas" width="200" height="200" borderColor="#298CD2" backgroundColor="#D85151" />
</mx:WindowedApplication>

  1. 飘浮 | #1

    这就是我问的....... :mrgreen: :mrgreen: :shock:

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
回到顶部