我在 adobe flex 中创建了一个虚拟键盘库。
我已经为 Windows 创建了一个 ANE,以将键盘设置为始终位于顶部且不可聚焦。使用:
int exstyle = GetWindowLong(hwnd3, GWL_EXSTYLE);
exstyle |= WS_EX_NOACTIVATE;
但现在我必须为 mac (OS 10.7) 创建一个 ANE
- 我必须从正在运行的 Flex 应用程序访问键盘(keywindow)
- 将其始终设置在顶部且不可聚焦(即使我单击按键或从键盘的组合框中选择键盘语言,它也不会获得焦点)。使光标始终停留在编辑器中。
我已经使用测试了示例 mac 应用程序(仅用于测试目的)
setLevel:NSFloatingWindowLevel
但是,当我单击窗口的空白区域时,它不会获得焦点(光标停留在我的编辑器/文本区域中),但是当我单击其上的任何按钮时,该按钮就会获得焦点。
How to access the flex virtual keyboard and set it to No-Activate mode in Mac
------------------------------------------已添加---------------- ----------------------------------------------------
我已经使用此代码将我的 Flex 应用程序设置在所有窗口 NSWindow 的顶部
*myMainWindow = [[[NSApplication sharedApplication] windows] objectAtIndex:0];
//[myMainWindow setLevel:NSFloatingWindowLevel];
[myMainWindow setLevel:NSMainMenuWindowLevel+1];
但我想停用该窗口,这样它就不会获得焦点。就像 Mac 中的 KeyboardViewer 一样。每次点击按键(Flex 键盘)时,KeyEvent 都应该重定向到当前的 TextInput。
请帮助我提出您的建议。
最佳答案
您是说您在键盘应用程序中创建了一个试图转换窗口的 ANE 吗? ANE 似乎是可行的方法,除非您可以配置 Flex 应用程序以将其主窗口创建为 NSPanel 而不是 NSWindow。
您可以做的是创建一个与窗口大小相同的面板,然后将面板的内容 View 设置为窗口的内容 View 。这会将窗口的所有内容移动到新创建的面板中。然后在主窗口上调用 orderOut 并在面板上调用 makeKeyAndOrderFront 。这是我们在 Connect 中的类似代码:
NSWindow *mainWindow = [[NSApp windows] objectAtIndex: 0];
NSView *mainContentView = [mainWindow contentView];
NSPanel *mainPanel = [[NSPanel alloc] initWithContentRect:[mainContentView frame]
styleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask
backing:NSBackingStoreBuffered defer:YES];
[mainPanel setContentView:mainContentView];
[mainPanel setLevel:NSScreenSaverWindowLevel];
[mainPanel makeKeyAndOrderFront:nil];
[mainContentView orderOut:nil];
关于objective-c - 单击 MAC float 窗口中的按钮后将焦点返回到编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20902219/