我有一个透明的NSWindow
跟随用户的屏幕到达每个应用程序的前面(NSWindow
停留在每个应用程序前面,无论是什么,甚至是全屏应用程序。)
在NSWindow
我有一个显示弹出窗口的mouseDown
事件。假设我在全屏模式下进行safari,我在它前面有我的窗口,我点击safari然后再次点击我的窗口:没有任何反应,mouseDown不会发生。我必须再次点击,以便触发mouseDown
事件
如何强制我的NSWindow
始终处于活动状态,因此当我点击后台应用并再次点击我的窗口时,我不必点击它2x来触发mouseDown
?
谢谢!
答案 0 :(得分:2)
我不确定这是否正是你想要的(它不是一个窗口宽度设置),但是,来自documentation:
默认情况下,窗口中的鼠标按下事件不是关键窗口 只需将窗户向前移动并使其成为关键;事件不是 发送到发生鼠标单击的
NSView
对象。该 但是,NSView
可以通过覆盖来声明初始鼠标按下事件acceptsFirstMouse:
返回YES
。这种方法的论点是 发生在非键窗口中的鼠标按下事件,即视图 对象可以检查以确定是否要接收鼠标 事件并可能成为第一响应者。你想要默认 此方法的行为,例如,影响该方法的控件 窗口中选定的对象。
然而,在某些情况下,它是 适合覆盖此行为,例如用于控件 即使窗口处于非活动状态,也应收到
mouseDown:
条消息。 支持此点击行为的控件示例如下 窗口的标题栏按钮。
或者你可以尝试摆弄
- (void)sendEvent:(NSEvent *)theEvent
并查看您是否可以自定义方式处理事件。
答案 1 :(得分:2)
如果你将无边框的NSButton实例添加到窗口的视图中并将图像设置为按钮的图像(以及它的替代图像,使其更漂亮),它将开箱即用:只需连接按钮的操作方法到您的应用程序委托(或您要处理单击操作的对象)。然后单击图像(即按钮)将触发按钮的动作方法,无论哪个窗口处于活动状态。
答案 2 :(得分:1)
这对我有用,希望这将有所帮助,这将使您的窗口始终位于所有应用程序之上
[self.window makeKeyAndOrderFront:nil];
[self.window setLevel:NSStatusWindowLevel];
答案 3 :(得分:-2)
我认为你真正应该做的是使用一个NSPanel(一个浮动的调色板 - 一种特殊的NSWindow),它将以与操作系统一致的方式完成你想要的,而不是试图打击预期的行为。 / p>
以下是NSPanel文档:
这里有一些有用且简洁的信息:
http://cocoadev.com/wiki/NSPanel
默认情况下,当应用程序处于非活动状态时,NSPanel将消失,但您可以将其关闭。
我很抱歉没有更充分地解决这个问题......时间紧迫。
编辑:
请注意,您可以简单地让窗口按照需要运行:
“但是,NSView可以通过覆盖acceptFirstMouse:来返回YES来声明初始鼠标按下事件。”
您需要对任何NSView子类执行此操作以跳过“激活单击”。