2009-07-16 6 views
6

NSView 객체의 CGContextRef를 얻어야합니다. 내가 어떻게 알았 더라면 그렇게 나쁘지 않을 것이다.drawRect 외부에서 NSView의 CGContextRef를 얻으시겠습니까?

은 탄소에서이 일을 다음과 같이 수행되었다 :

CGContextRef cgref = (libvlc_drawable_t)GetWindowPort(HIViewGetWindow((OpaqueControlRef*)hiViewRef)); 

은 분명히는 NSView의 서브 클래스에 의해 수행 (또는 서브 클래스의) 그 안에 그것을 잡는 것은의 drawRect을하지만 그건 너무 추한 할 수 있습니다.

당신의 아이디어?

+2

당신이 무슨 일을하는지 모른다는 NSView의 lockFocusIfCanDraw에 모습을 가지고 있지만, 많은 좌절감을 가져올 수있는 것처럼 들립니다. – Chuck

+0

내 응용 프로그램에 VLC 비디오 플레이어를 내장하고 있습니다. 나는 그릴 수있는 "드로어 블"이 필요합니다. – Maleev

답변

9

나는 그것을 사용한 적이 있지만, 생각이 당신의 방법입니다 :

[myView lockFocus]; 
imageContext = (CGContextRef)[[NSGraphicsContext currentContext] 
            graphicsPort]; 
... 
[myView unlockFocus]; 

+1

그게 내가하는 일이기도하지만,'unlockFocus' 메시지를 지나면 그 컨텍스트를 유효하게 생각하지 않아야한다는 것을 분명히하는 것이 가치가 있습니다. 그것의 –

+0

생각도하지만 흥미로운 것은, 그 MS Windows에서, 나는 또한 영속 있어야하는데 윈도우 ID를 사용, 그것은 (질문 블록에 내 의견을 참조) 잘 작동 – Maleev