2009-07-16 4 views
6

Ich muss CGContextRef des NSView-Objekts abrufen. Es wird nicht so schlimm sein, wenn ich wüsste wie.Erhalten Sie einen CGContextRef von NSView außerhalb von DrawRect?

In Kohlenstoff wurde diese Sache so gemacht:

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

Offensichtlich kann es durch Subklassen NSView getan werden (oder es ist Unterklasse) und es in seiner drawRect fangen, aber das ist zu hässlich.

Ihre Ideen?

+2

Ich weiß nicht, was du tust, aber es klingt wie etwas, das zu viel Frustration führen wird. – Chuck

+0

Ich habe VLC Video Player in meine Anwendung eingebettet. Ich brauche ein "Drawable", zu dem es ... zeichnen würde. – Maleev

Antwort

9

Ich habe es nie benutzt, aber es denkt, das ist Ihr Weg:

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

auch einen Blick auf die lockFocusIfCanDraw von NSView

+1

Das würde ich auch tun, aber es lohnt sich, klarzustellen, dass Sie wahrscheinlich nicht davon ausgehen sollten, dass dieser Kontext nach der Nachricht "unlockFocus" gültig ist. –

+0

Ich dachte auch darüber nach, aber was interessant ist, dass ich unter MS Windows die Fenster-ID verwende, die auch unbeständig sein soll, und es funktioniert gut (siehe meinen Kommentar im Fragenblock) – Maleev

Verwandte Themen