Apache flex 如何检测窗口是隐藏(cmd-h)还是关闭(cmd-w)-Mac
我正在开发一个使用多个窗口的AIR应用程序。我遇到了一个问题,当主应用程序窗口不可见时,我想打开新窗口(例如烤面包机通知),但根据窗口的关闭方式,行为会有所不同 当用户使用CMD-H隐藏所有应用程序窗口时,打开一个新窗口将导致所有应用程序窗口返回前台(而不是像我所期望的那样,仅显示该新窗口)。但是,如果用户使用CMD-W关闭了一个窗口,则当我打开一个新窗口时,该窗口将不可见 有没有办法1)告诉用户何时使用cmd-h隐藏所有窗口,或者2)告诉用户是否使用cmd-h和closed cmd-w隐藏窗口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隐藏窗口
谢谢事实上我刚刚找到了这个问题的好答案。显然,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);
}
谢谢你帮我弄明白