【问题标题】:Keeping window of another application active while still receiving mouse events from another app's window?保持另一个应用程序的窗口处于活动状态,同时仍从另一个应用程序的窗口接收鼠标事件?
【发布时间】:2010-03-19 22:49:55
【问题描述】:

有没有办法让我的应用程序的窗口接收键盘和/或鼠标事件(即用户单击窗口的按钮),同时仍将焦点保留在另一个不相关的应用程序上?

我尝试在不同级别配置我的窗口,包括 [myWindow setLevel:NSPopUpMenuWindowLevel] 无济于事。

【问题讨论】:

    标签: objective-c cocoa nswindow appkit nsevent


    【解决方案1】:

    您应该能够通过发送NSApp a preventWindowOrdering message 然后返回YES 使您的视图(至少是处理鼠标点击的视图)响应acceptsFirstMouse: messages 来处理鼠标点击,而无需将窗口放在前面。

    您不应该让您的应用在没有将自身排序在前面的情况下处理打字。如果正在出现的字段被另一个窗口遮住,用户可能不会意识到他们正在输入的内容。

    【讨论】:

    • 感谢您的提示,尽管它仍然无法按照我想要的方式工作。对于我的窗口类,我将覆盖 canBecomeKeyWindow(返回 NO)、makeKeyWindow(什么都不做)、acceptFirstResponder(返回 NO)和 canBecomeMainWindow(什么都不做)。我还定义了你建议我自己的 NSButton 类来覆盖acceptsFirstMessage:基本上,我需要我的窗口弹出并让用户点击它的按钮,而前一个应用程序(比如iTunes)保持活动状态,其窗口和菜单栏处于活动状态/焦点。
    【解决方案2】:

    找到了。简单,但难以捉摸。

    使用 NSPanel 并确保面板样式为非激活 (NSNonactivatingPanelMask) 或在 IB 的检查器中勾选相同的选项。

    【讨论】:

      猜你喜欢
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多