Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何检测窗口是隐藏(cmd-h)还是关闭(cmd-w)-Mac_Apache Flex_Macos_Air - Fatal编程技术网

Apache flex 如何检测窗口是隐藏(cmd-h)还是关闭(cmd-w)-Mac

Apache flex 如何检测窗口是隐藏(cmd-h)还是关闭(cmd-w)-Mac,apache-flex,macos,air,Apache Flex,Macos,Air,我正在开发一个使用多个窗口的AIR应用程序。我遇到了一个问题,当主应用程序窗口不可见时,我想打开新窗口(例如烤面包机通知),但根据窗口的关闭方式,行为会有所不同 当用户使用CMD-H隐藏所有应用程序窗口时,打开一个新窗口将导致所有应用程序窗口返回前台(而不是像我所期望的那样,仅显示该新窗口)。但是,如果用户使用CMD-W关闭了一个窗口,则当我打开一个新窗口时,该窗口将不可见 有没有办法1)告诉用户何时使用cmd-h隐藏所有窗口,或者2)告诉用户是否使用cmd-h和closed cmd-w隐藏窗口

我正在开发一个使用多个窗口的AIR应用程序。我遇到了一个问题,当主应用程序窗口不可见时,我想打开新窗口(例如烤面包机通知),但根据窗口的关闭方式,行为会有所不同

当用户使用CMD-H隐藏所有应用程序窗口时,打开一个新窗口将导致所有应用程序窗口返回前台(而不是像我所期望的那样,仅显示该新窗口)。但是,如果用户使用CMD-W关闭了一个窗口,则当我打开一个新窗口时,该窗口将不可见

有没有办法1)告诉用户何时使用cmd-h隐藏所有窗口,或者2)告诉用户是否使用cmd-h和closed cmd-w隐藏窗口


谢谢

事实上我刚刚找到了这个问题的好答案。显然,cmd-H和cmd-W不触发keyDown事件的原因是它们是capturee,并被本机应用程序菜单停止

默认情况下,框架会将几个“普通”mac OS菜单选项放入AIR应用程序中,其中包括用于关闭窗口的cmd-w、用于隐藏的cmd-h以及用于复制/剪切/粘贴的快捷方式。为了避免默认行为,我要么删除了这些菜单选项,要么更改了它们的等价键(触发它们的快捷组合)

添加首选项快捷方式(cmd-,),覆盖cmd-w,将cmd-w更改为cmd-shift-w,以及覆盖cmd-h功能的代码如下所示:

if (NativeApplication.supportsMenu) {
    var prefItem:NativeMenuItem = new NativeMenuItem("Preferences...");
    prefItem.addEventListener(Event.SELECT, handlePreferencesMenuSelect);
    prefItem.keyEquivalent = ",";

    var closeItem:NativeMenuItem = new NativeMenuItem("Close Tab");
    closeItem.addEventListener(Event.SELECT, handleCloseTabMenuSelect);
    closeItem.keyEquivalent = "w";

    // Add the preferences option under the first menu
    // Also add a spacer line (like most other applications)
    // Also change the hide command to our own handler
    var baseMenu:NativeMenuItem = NativeMenuItem(NativeApplication.nativeApplication.menu.items[0]);
    baseMenu.submenu.addItemAt(new NativeMenuItem("", true), 1);
    baseMenu.submenu.addItemAt(prefItem, 2);
    for (var idx:String in baseMenu.submenu.items) {
        var menuItem:NativeMenuItem = baseMenu.submenu.items[idx]; 
        if (menuItem && menuItem.keyEquivalent == 'h' && menuItem.keyEquivalentModifiers.length == 1) {
            baseMenu.submenu.removeItemAt(int(idx));

            var hideItem:NativeMenuItem = new NativeMenuItem("Hide Application");
            hideItem.addEventListener(Event.SELECT, handleHideWindowSelect);
            hideItem.keyEquivalent = "h";
            baseMenu.submenu.addItemAt(hideItem, int(idx));
        }
    }

    // Set the close window shortcut to cmd+shift+w, instead of cmd+w
    var fileMenu:NativeMenuItem = NativeMenuItem(NativeApplication.nativeApplication.menu.items[1]);
    NativeMenuItem(fileMenu.submenu.getItemAt(0)).keyEquivalent = 'W';
    fileMenu.submenu.addItem(closeItem);
}

谢谢你帮我解决这个问题。

事实上,我刚刚找到了这个问题的好答案。显然,cmd-H和cmd-W不触发keyDown事件的原因是它们是capturee,并被本机应用程序菜单停止

默认情况下,框架会将几个“普通”mac OS菜单选项放入AIR应用程序中,其中包括用于关闭窗口的cmd-w、用于隐藏的cmd-h以及用于复制/剪切/粘贴的快捷方式。为了避免默认行为,我要么删除了这些菜单选项,要么更改了它们的等价键(触发它们的快捷组合)

添加首选项快捷方式(cmd-,),覆盖cmd-w,将cmd-w更改为cmd-shift-w,以及覆盖cmd-h功能的代码如下所示:

if (NativeApplication.supportsMenu) {
    var prefItem:NativeMenuItem = new NativeMenuItem("Preferences...");
    prefItem.addEventListener(Event.SELECT, handlePreferencesMenuSelect);
    prefItem.keyEquivalent = ",";

    var closeItem:NativeMenuItem = new NativeMenuItem("Close Tab");
    closeItem.addEventListener(Event.SELECT, handleCloseTabMenuSelect);
    closeItem.keyEquivalent = "w";

    // Add the preferences option under the first menu
    // Also add a spacer line (like most other applications)
    // Also change the hide command to our own handler
    var baseMenu:NativeMenuItem = NativeMenuItem(NativeApplication.nativeApplication.menu.items[0]);
    baseMenu.submenu.addItemAt(new NativeMenuItem("", true), 1);
    baseMenu.submenu.addItemAt(prefItem, 2);
    for (var idx:String in baseMenu.submenu.items) {
        var menuItem:NativeMenuItem = baseMenu.submenu.items[idx]; 
        if (menuItem && menuItem.keyEquivalent == 'h' && menuItem.keyEquivalentModifiers.length == 1) {
            baseMenu.submenu.removeItemAt(int(idx));

            var hideItem:NativeMenuItem = new NativeMenuItem("Hide Application");
            hideItem.addEventListener(Event.SELECT, handleHideWindowSelect);
            hideItem.keyEquivalent = "h";
            baseMenu.submenu.addItemAt(hideItem, int(idx));
        }
    }

    // Set the close window shortcut to cmd+shift+w, instead of cmd+w
    var fileMenu:NativeMenuItem = NativeMenuItem(NativeApplication.nativeApplication.menu.items[1]);
    NativeMenuItem(fileMenu.submenu.getItemAt(0)).keyEquivalent = 'W';
    fileMenu.submenu.addItem(closeItem);
}
谢谢你帮我弄明白