为什么我的NSWindow第一次只收到mouseOver事件?

时间:2010-05-17 00:19:21

标签: cocoa mouseover nswindow first-responder makekeyandordertofront

我有一个应用程序,使用orderOut和orderFront显示和隐藏无边框窗口。当它可见时,我希望它在鼠标移过它时成为关键窗口。 到目前为止,我已经做到了这一点:

  • 在awakeFromNib中,我已将其第一个响应者设置为自身。
  • 在窗口的构造函数中,我设置接受鼠标事件为YES。
  • 在mouseMoved方法中,我使用makeKeyAndOrderToFront。

我的问题是,这只有在我第一次将鼠标移到窗口上时才有效。 之后,它不会收到任何mouseOver事件。 我已经尝试检查firstResponder,但据我所知,它永远不会从窗口更改。

我有什么想法可以让它发挥作用?

2 个答案:

答案 0 :(得分:3)

如果你想接收mouseMoved个事件,你需要添加一个tracking area(我认为你的意思是因为Cocoa没有mouseOver事件这样的事情。)

我写了一个名为Shroud的应用程序,它做了类似的事情 - 它隐藏了一个无边框窗口,当你将鼠标移到它上面时,它会覆盖菜单栏。 code很简单,可以作为一个例子。

答案 1 :(得分:1)

以下是在@NicholasRiley answer的帮助下撰写的示例:

path_to_your_pin_folder/pin-3.0-76991-gcc-linux/ia32/runtime/pincrt
path_to_your_pin_folder/pin-3.0-76991-gcc-linux/intel64/runtime/pincrt/
path_to_your_pin_folder/pin-3.0-76991-gcc-linux/extras/xed-ia32/lib/
path_to_your_pin_folder/pin-3.0-76991-gcc-linux/extras/xed-intel64/lib/
path_to_your_pin_folder/pin-3.0-76991-gcc-linux/ia32/lib-ext/
path_to_your_pin_folder/pin-3.0-76991-gcc-linux/intel64/lib-ext/