1
나는이 경계선 오버레이 만들고 다음 코드를창을 활성화하거나 초점을 맞추는 방법?
AppDelegate.m
NSRect frame = [[NSScreen mainScreen] frame];
self.overlay = [[OverlayWindow alloc] initWithContentRect:frame
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
[self.overlay setAcceptsMouseMovedEvents:YES];
[self.overlay setOpaque:NO];
[self.overlay setLevel:CGShieldingWindowLevel()];
[self.overlay setBackgroundColor:[NSColor colorWithDeviceRed:0.0 green:0.0 blue:0.0 alpha:0.75]];
// Create the subview
OverlayView *subview = [[OverlayView alloc] initWithFrame:NSZeroRect];
[[self.overlay contentView] addSubview:subview];
[self.overlay setContentView:subview];
[self.overlay makeFirstResponder:subview];
[self.overlay orderFrontRegardless];
OverlayWindow.m
@implementation OverlayWindow
// need this so that we can accept mouse events in our view
// we want to use NSBorderlessWindowMask for this window, and that prevents us from
// becoming a key window and thus mouse events don't work
- (BOOL)canBecomeKeyWindow
{
return YES;
}
- (BOOL)canBecomeMainWindow
{
return YES;
}
@end
OverlayView.m
@implementation OverlayView
- (BOOL)acceptsFirstResponder {return YES;}
- (BOOL)resignFirstResponder {
self.needsDisplay = YES;
return YES;
}
- (BOOL)becomeFirstResponder {return YES;}
- (BOOL)canBecomeKeyWindow {return YES;}
...
- (void)keyDown:(NSEvent *)theEvent {
switch (theEvent.keyCode) {
case 53:
[[self window] close];
break;
default:
break;
}
}
@end
그리고이 모든 잘 작동합니다. 오버레이가 만들어지고 키보드 이벤트를 캡처 할 수 있습니다. 그러나 오버레이를 시작했을 때 내 앱에 초점이 맞춰 졌음에도 불구하고 먼저 오버레이를 클릭하여 포커스를 주거나 활성으로 만들어야합니다. 오버레이를 만드는 방법에 대한 아이디어가 있으므로 키보드 이벤트가 오버레이를 먼저 클릭하지 않아도 작동 할 수 있도록 초점이 맞춰질 것입니다.
그게 전부를, 감사합니다! 나는 가까웠다. 나는 시도했다 : [self.overlay makeKeyAndOrderFront : self]; 그러나 그것은 작동하지 않았다. 정말 고마워 :) – socketwiz