Использование NSTrackingArea в NSView, который не привязан к окну? - PullRequest
0 голосов
/ 27 марта 2012

По сути, я хочу «невидимый» NSView, охватывающий весь мой экран. Я добавлю к этому NSTrackingArea, чтобы получать глобальные события мыши, когда мой курсор перемещается по экрану.

-(void)setTrackingArea 
{
    view = [[NSView alloc] initWithFrame:[NSScreen currentScreenForPoint:[NSEvent mouseLocation]].frame];

    NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[NSScreen currentScreenForPoint:[NSEvent mouseLocation]].frame options:NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways owner:view userInfo:nil];

    [view addTrackingArea:area];

    [area release];

    //[[window contentView] addSubview:view];

    //I don't want to add the view to a window, as all tutorials say.
}

- (void)mouseExited:(NSEvent *)theEvent 
{
    NSLog(@"Exit"); //Never firing
}

Возможно ли это? Использование NSViews и NSTracking Areas без окна?

1 Ответ

2 голосов
/ 27 марта 2012

Использование невидимого представления определенно не то, что вы хотите сделать. Изучите метод класса addGlobalMonitorForEventsMatchingMask:: на NSEvent.

Например, вот как можно добавить монитор для движения мыши:

[NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask handler:^(NSEvent *mouseMovedEvent) {
    //do something with that event
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...