Macos 如何将鼠标事件从Cocoa事件循环发送到Carbon窗口?

Macos 如何将鼠标事件从Cocoa事件循环发送到Carbon窗口?,macos,cocoa,macos-carbon,Macos,Cocoa,Macos Carbon,我有一个Carbon应用程序,里面有一些嵌入的Cocoa视图,我正试图逐渐移植到Cocoa。该应用程序目前使用Carbon事件循环(RunApplicationEventLoop),从Carbon-nib文件加载其主窗口,一切都像一个魔咒 我现在要做的是用[NSApp run]替换RunApplicationEventLoop。 应用程序正确启动并显示主窗口,但并非所有事件都传递给事件处理程序。鼠标单击仅传递到嵌入在该Carbon窗口中的Cocoa视图,而不会传递到该窗口本身的Carbon事件处

我有一个Carbon应用程序,里面有一些嵌入的Cocoa视图,我正试图逐渐移植到Cocoa。该应用程序目前使用Carbon事件循环(
RunApplicationEventLoop
),从Carbon-nib文件加载其主窗口,一切都像一个魔咒

我现在要做的是用
[NSApp run]
替换
RunApplicationEventLoop
。 应用程序正确启动并显示主窗口,但并非所有事件都传递给事件处理程序。鼠标单击仅传递到嵌入在该Carbon窗口中的Cocoa视图,而不会传递到该窗口本身的Carbon事件处理程序

根据文件,我认为一切都应该正常工作。 我基本上在寻找:

  • 更详细的可可/碳一体化文件
  • 调试事件分派过程的想法

  • 注意:我尝试了
    [NSEvent addLocalMonitorForEventsMatchingMask:
    和替换
    NSWindow sendEvent:
    的实现(对于使用
    initWithWindowRef
    创建的NSWindow)。鼠标事件肯定会到达那里,但不会到达任何Carbon事件处理程序。

    在Carbon窗口中嵌入Cocoa视图时,Cocoa视图首先接收事件,然后将其传递给Carbon。Cocoa使用一个响应器链,链中的每个响应器要么处理事件,要么将其传递给下一个响应器。如果覆盖mouseDown:在Cocoa视图中,除非调用[super mouseDown:],否则鼠标按下事件不会传递给下一个响应程序。您的cocoa视图是否可能没有将事件传递给链中的下一个响应者?这可能会导致事件无法传递到您的碳窗。