2013-10-30 2 views
2

NSWindow의 코코아 애플리케이션에 NSBorderlessWindowMask (제목 표시 줄 제외) 스타일이 있습니다. 창에 이미지를 배치하고 싶지만 이미지의 일부는 창 외부에 있어야합니다.NSWindow : 이미지의 일부분을 창 외부에 배치하십시오.

어떻게이 작업을 수행 할 수 있습니까?

enter image description here

+0

나는 당신이해야 할 일은 당신의 윈도우 배경을 투명하게 만드는 것이라고 생각하지만, 몇개의 서브뷰를 볼 수 있도록해라. –

+0

창틀 (+ 그림자)은 어떻게됩니까? – dhrm

답변

4

는 여기에 내가 당신이 원하는 것과 관련 발견 두 기사입니다.

Cocoa With Love Example

parmanoir.com example

요점은, 그 경계선 투명 창을 만들기 위해 NSWindow 표시를 서브 클래스 사용자 정의 모양을 그리는 하위 뷰를 만들고 그 창 내용보기 확인하는 것입니다.

샘플 모양에서 그림자가 적용되어야합니다. 사랑스러운 코코아에서 :

그림자가 그려지는 모양은 자동으로 그려집니다. 완전히 지워진 창 부분은 마우스 클릭을받지 못합니다 (창을 통해 떨어집니다).

국경이보기 클래스 표시 방법이 그런 짓을 그리려면 해당 경로를하기 전에

NSBezierPath* border = [NSBezierPath bezierPathWithRect:self.frame]; 
[border setLineWidth: 1.0]; 
[[NSColor windowFrameColor] set]; 
[border stroke]; 

사용자 정의 뷰 클래스가없는 경우 [view lockFocus];을하고 함께 self을 대체하여 뷰 인스턴스.

숨기기 또는 하나의 샷 창을 소형화하면 해당 창을 출시 할 백업 저장소 원인 : 추첨 후 lockFocus에 관한 문서에서 [view unlockFocus];

중요한 메시지를 수행해야합니다. 표준 표시 메커니즘을 사용하여 그릴 때 사용하지 않으면 윈도우가 축소되거나 숨겨진 상태에서 그릴 기회가있을 경우 lockFocus 대신 lockFocusIfCanDraw를 사용해야합니다.

이렇게하는 또 다른 방법은 그림자를 유지하는 것이 두 창을 사용하고 다른 창을 자식으로 만드는 것입니다.

다양한 이유로 창 외부로 그릴 수 없으며, 최소한 프로세스가 소유하고 있거나 권한을 부여 받아야합니다 (다른 많은 이유도 있음).

+0

답장을 보내 주셔서 감사합니다. NSWindow를 서브 클래스 화하면 NSView (컨텐츠 뷰)에서 위 NSWindow의 테두리와 그림자를 어떻게 구현할 수 있습니까? – dhrm

+0

내 대답을 링크 된 기사에서 직접 사용할 수있는 정보로 업데이트했습니다 ...보기에서 테두리를 그리는 일은 간단합니다. [경로 드로잉 가이드] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaDrawingGuide/Paths/Paths.html#//apple_ref/doc/uid/TP40003290-CH206-BBCHFJJG)를 참조하십시오. –