【问题标题】:Subclass NSApplication in MonoMacMonoMac 中的子类 NSApplication
【发布时间】:2012-08-12 11:52:23
【问题描述】:

我需要子类化 MonoMac 中的 NSApplication 以覆盖 NSApplication 的 sendEvent(C# 术语中的 SendEvent)方法,以便接收媒体键事件(Macbook 上的播放、暂停、下一步、上一个),如下所述:Listening to mac keyboard play/pause events 和这里:https://bitbucket.org/nkreeger/whitedragon/src/6f530c8a34a7/component/sbAppleMediaKeyController.mm

到目前为止,我想出了这个代码:

class MainClass
{
    static void Main (string[] args)
    {
        MyApp.Init ();
        MyApp.Main (args);
    }
}
class MyApp : NSApplication
{
    public override void SendEvent (NSEvent theEvent)
    {
        Console.WriteLine ("event received!");
        base.SendEvent (theEvent);
    }
    public override void SetMainMenu (NSMenu aMenu)
    {
        Console.WriteLine ("main menu set!");
        base.SetMainMenu (aMenu);
    }
}

但没有调用 SendEvent 或 SetMainMenu(出于测试目的添加,因为在启动时应该调用一次 SetMainMenu),因为我没有得到任何控制台输出。

这样做的正确方法是什么?

【问题讨论】:

  • 我会尝试除 Console.WriteLine() 之外的其他调试输出方法。写入文件、弹出对话框或使用 System.Diagnostics.Trace 方法(您可以安装自己的跟踪目标实现)。
  • 嗨,Les,你有没有想过这个问题?

标签: c# cocoa mono monomac nsapplication


【解决方案1】:

仅子类化NSApplication 不足以让您的子类替换正常的子类。您还必须在您的应用程序列表中设置您的NSPrincipalClass

见:

https://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多