2009-07-16 18 views
6

Tôi cần nhận được CGContextRef của đối tượng NSView. Sẽ không tệ nếu tôi biết làm thế nào.Lấy một CGContextRef của NSView bên ngoài drawRect?

Trong Carbon điều này đã được thực hiện như thế này:

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

Rõ ràng nó có thể được thực hiện bằng cách subclassing NSView (hoặc đó là lớp con) và bắt nó trong nó drawRect, nhưng đó là quá xấu xí.

Ý tưởng của bạn?

+2

Tôi không biết những gì bạn đang làm, nhưng nó âm thanh như một cái gì đó sẽ dẫn đến rất nhiều thất vọng. – Chuck

+0

Tôi đang nhúng trình phát video VLC vào ứng dụng của mình. Tôi cần một "drawable" mà nó sẽ ... vẽ. – Maleev

Trả lời

9

Tôi chưa bao giờ sử dụng nó nhưng nó nghĩ rằng đây là cách của bạn:

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

cũng có một cái nhìn vào lockFocusIfCanDraw của NSView

+1

Đó là những gì tôi muốn làm, nhưng nó đáng làm rõ rằng bạn có lẽ không nên đếm trên bối cảnh đó là hợp lệ qua tin nhắn 'unlockFocus'. –

+0

Nghĩ về nó quá, nhưng những gì thú vị, mà trên MS Windows, tôi sử dụng id cửa sổ, mà cũng được coi là vô thường, và nó hoạt động tốt (xem bình luận của tôi trong khối câu hỏi) – Maleev

Các vấn đề liên quan