如何在Mac OS中创建“No Activate”窗口

时间:2012-05-16 13:56:11

标签: objective-c macos cocoa nswindow macos-carbon

在Windows平台中,窗口有一个名为SWP_NOACTIVATE的属性,该窗口显示窗口显示为非活动状态,并且在鼠标单击后,该窗口不会获得焦点,例如,您可以通过鼠标单击键入虚拟键盘。 什么是Mac中的等效解决方案?换句话说,如何实现一个不改变焦点的窗口点击它? 感谢。

2 个答案:

答案 0 :(得分:4)

你在这个问题上加上了“Cocoa”和“Carbon”标签,但由于 任何人都不再使用Carbon了,我会尝试用Cocoa解决你的问题。

检查这两个NSWindow方法:canBecomeKeyWindowcanBecomeMainWindow。当你希望你的窗口不可聚焦时,考虑对NSWindow进行子类化并为这些事情中的任何一个(或两个)返回“NO”。

还有一个名为setIgnoresMouseEvents:的有趣方法,它使窗口对鼠标点击和事件“透明”。

答案 1 :(得分:2)

您需要阅读Key and Main Windows中的Window Programming Guide。简而言之,创建自己的NSWindow子类并覆盖-canBecomeKeyWindow-canBecomeMainWindow,以便两者都返回NO:

  

...一个充当浮动调色板项目的窗口   通过鼠标操作拖出来永远不需要成为关键窗口。这样的   window可以定义为NSWindow的子类,它覆盖了   方法canBecomeKeyWindow和canBecomeMainWindow返回NO   而不是默认值YES。以这种方式定义窗口可以防止它   从永远成为关键或主要窗口。