我正在将GTK应用程序集成到MacOSX中。MacOSX上的GTK是一些可可和碳基础知识的包装。我们有一些特定于平台的东西直接使用碳全局菜单API(它比COCOA更低级和更灵活,我们不需要是64位)。
似乎GTK在Carbon把所有的键盘事件作为命令发送之前就已经把它们吞下去了。这是有道理的,因为没有碳指令到GTK世界的映射。一般来说,这不是问题,因为我们有一个全局密钥事件处理程序,并通过我们自己的命令系统分派所有内容。然而,这似乎阻止了命令-?从打开“帮助搜索”菜单,我找不到以编程方式执行此操作的方法。
菜单管理器的MenuSelect功能很有前途,但我还没有找到一种自动确定坐标的方法,而且由于某种原因,它只在我点击两次组合时才起作用。。。
或者,发送命令-?按键到Carbon的命令处理或直接合成命令事件会很好,但我在这方面没有任何运气。
如果没有命令ID,Carbon的ProcessHICommand就没有任何用处,我也不知道它是什么(如果有的话)
关于Cocoa,我可以使用NSWindow并调用InterpretKeyEvents,但是我在合成NSEvent时没有任何运气——它只是发出哔哔声。我使用的事件是
var evt = NSEvent.KeyEvent (NSEventType.KeyDown, System.Drawing.PointF.Empty,
NSEventModifierMask.CommandKeyMask | NSEventModifierMask.ShiftKeyMask,
0, win.WindowNumber, NSGraphicsContext.CurrentContext, "?", "?",
false, (ushort) keycode);
根据GTK密钥映射确定密钥码为44。我用一个简单的单体(Cocoa)应用程序确认了keycode是正确的,但是InterpretKeyEvents也不能处理该应用程序中的事件。我找不到任何与该命令相关联的选择器。