2

我有一個應用程序,使用orderOut和orderFront顯示和隱藏無邊界窗口。當它可見時,我希望它在鼠標移過它時成爲關鍵窗口。 到目前爲止,我已經這樣做了:爲什麼我的NSWindow第一次只接收mouseOver事件?

  • 在awakeFromNib中,我已經設置了它的第一個響應者。
  • 在窗口的構造函數中,我將鼠標事件設置爲YES。
  • 在mouseMoved方法中,我使用makeKeyAndOrderToFront。

我的問題是,這隻有在我第一次將鼠標移到窗口上時才起作用。 之後,它不會收到任何mouseOver事件。 我試過檢查firstResponder,但據我可以告訴它永遠不會從窗口中更改。

任何想法,我可以做些什麼來得到這個工作?

回答

3

如果您想收到mouseMoved事件(我認爲這就是您的意思,因爲Cocoa沒有像mouseOver事件那樣的事情),您需要添加tracking area

我寫了一個名爲Shroud的小應用程序,它做了類似的事情 - 它隱藏了一個無邊框窗口,當您將鼠標移動到該窗口上時,它將覆蓋菜單欄。 code非常簡單,可能作爲示例很有用。

1

下面是與@NicholasRileyanswer的幫助下寫了一個例子:

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"); 
} 
相關問題