2

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

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

我的问题是,这只适用于我第一次将鼠标移到窗口上。之后,它不会收到任何 mouseOver 事件。我试过检查 firstResponder 但据我所知,它永远不会从窗口改变。

有什么想法可以让这个工作吗?

4

2 回答 2

3

如果您想接收事件,则需要添加一个跟踪区域mouseMoved(我假设这就是您的意思,因为 Cocoa 没有mouseOver事件之类的东西)。

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

于 2010-05-17T01:16:28.457 回答
2

这是在@NicholasRiley回答的帮助下编写的示例:

NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self.view frame] options:NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways owner:self userInfo:nil];
[self.view addTrackingArea:area];

-(void)mouseEntered:(NSEvent *)theEvent {
    NSLog(@"mouseEntered");
}

-(void)mouseExited:(NSEvent *)theEvent {
    NSLog(@"mouseExited");
}
于 2016-05-25T11:51:41.077 回答