2013-03-15 2 views
4

테두리가없는 NSPanel이 있는데 처음 실행하면 포커스가 있습니다. mousedragged 메소드가 올바르게 트리거되지만 다른 앱으로 포커스를 전환 한 다음 NSPanel로 돌아갈 때 포커스가 있습니다. (NSNonactivatingPanelMask로 설정) 더 이상 mousedragged 이벤트를 수신하지 않습니다.NSPanel이 mousedragged 이벤트를 수신하지 못했습니다.

여전히 mouseup 및 mousedown 이벤트가 발생하므로 mousedragged 이벤트가 실행되지 않는 이유가 없습니다.

아이디어가 있으십니까? 여기

는 초기화됩니다 방법은 다음과 같습니다

_panel = [[MyPanel alloc] initWithContentRect:frame 
       styleMask:NSBorderlessWindowMask | NSNonactivatingPanelMask 
       backing:NSBackingStoreBuffered 
       defer:NO]; 

나는 또한 내 패널 클래스에 모든 방법을 추가하는 시도했다 :

- (BOOL)canBecomeKeyWindow { 
    return YES; 
} 

- (BOOL)canBecomeMainWindow 
{ 
    return YES; 
} 

- (BOOL)canBecomeFirstResponder { 
    return YES; 
} 

- (BOOL)acceptsFirstResponder 
{ 
    return YES; 
} 

- (BOOL)acceptsFirstMouse 
{ 
    return YES; 
} 

그리고 아래로 마우스에 그것을 첫 번째로 반응을 (이 그것을 여전히) 수신 :

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    [self makeFirstResponder:self]; 
    [self makeKeyWindow]; 
    [self setBackgroundColor:[NSColor redColor]]; 
    [self display]; 
} 

(가) 단지의 mouseDragged

이 포함

- (void)mouseDragged:(NSEvent *)theEvent 
{ 
    [self setBackgroundColor:[NSColor greenColor]]; 
    [self display]; 
    NSLog(@"dragged"); 
} 

창에 포커스를 놓고 싶지 않습니다. (초점은 아래의 타사 앱에 남아 있어야합니다).

업데이트 : 나는 샘플 프로젝트를 추가 한, 여기 다운로드 : http://users.telenet.be/prullen/MovingPanel.zip

당신은 당신이 먼저 응용 프로그램을 실행하고 드래그 할 때, 출력 지속적으로 CONSOLE.LOG에서 "드래그"할 것이다 살펴 보 겠지만 (배경색은 녹색). 그런 다음 다른 앱으로 전환 한 다음 움직이는 패널 앱으로 돌아 가면 드래그하여 더 이상 아무 것도 출력하지 않습니다. (그리고 mousedown 이벤트 핸들러에서 설정 한 배경색은 빨간색으로 표시됩니다).

NSNonactivatingPanelMask가 없으면 정상적으로 작동하지만 내 패널 아래 창은 계속 활성화되어 있어야합니다. 이를 수행하는 다른 방법이 있다면 공유하십시오.

패널에서 빠르게 두 번 클릭 한 다음 끌면 녹색으로 바뀌므로 (mousedragged가 호출 됨) 이동하지 않습니다 ... 무엇을해야할지 모르겠습니다. 생각 해봐.

답변

0

나는 [self setMovableByWindowBackground : NO]를 수행하는 경우에도주의를 기울였습니다. 다음 올바르게 작동합니다. 나는 setMovableByWindowBackground가 작동하는 방식이 mouseDragged가 호출되는 것을 방해하고 있다고 확신한다. 아마도 그것이 전혀 불리는 버그 일 것입니다.

나는 하나의 가능한 솔루션이 자신의 창 드래그를 구현하는 것이 겠지.

윈도우가 움직일 때 실제로 관심이있는 것이 있다면이 질문과 답변을 통해 필요한 것을 얻을 수 있습니다.

How to receive notifications when moving Window by mouse?

+0

감사합니다. – Wesley

관련 문제