1

NSGraphicsContext に変換できる CGContext があります。コンテキスト用のclipRectを持つNSWindowがあります。

スクロールビューをコンテキストに入れ、次にスクロールビューに他のビューを入れて、画像を入れることができるようにしたい...しかし、スクロールビューをコンテキストにアタッチする方法がわかりません。

最終的には、ペン先からのビューになる可能性がありますが、それがどのように重要になるかはわかりません.

私はこのスレッドを見てきました(http://lists.apple.com/archives/quartz-dev/2006/Nov/msg00010.html)しかし、ビューをコンテキストにアタッチする方法のステップを省略しているようです。私が見逃している明らかな何かがない限り。

編集:

私がこのような状況にある理由は、私が Mozilla プラグインを書いているからです。ブラウザーは、CGContext (Quartz) と WindowRef (QuickDraw) を提供します。CGContext を NSGraphicsContext に変換し、windowRef を NSWindow に変換できます。別のデータ構造から、クリッピング長方形もあります...

必要に応じてスクロールバー、ボタン、その他のUI要素を使用して、そのコンテキストに画像を描画しようとしています...したがって、NSViewが必要です(欲しい)...

4

3 に答える 3

0

将来の世代のために(そして、私がこれをどのように行ったかを忘れて、Googleが私自身の質問に私を導きます)これが私がこれをどのように行っているかです:

すべてのビューを含む NIB があり、起動時にこれをロードします。

SetWindow で、クリップ rect を設定し、実際にアタッチします。

NP_CGContext* npContext = (NP_CGContext*) window->window;   
NSWindow* browserWindow = [[[NSWindow alloc] initWithWindowRef:npContext->window] autorelease];

NSView* cView = [browserWindow contentView];
NSView* hitView = [cView hitTest:NSMakePoint(window->x + 1, clip.origin.y + 1)];
if (hitView == nil || ![[hitView className] isEqualToString:@"ChildView"]) 
{
    return;
}

superView = [hitView retain];

[superView addSubview: topView];

[superView setNextResponder: topView];
[topView  setNextResponder: nil];
[browserWindow makeFirstResponder: topView];

一度だけ追加することを確認するために、フラグがあります...

そして、handleEvent で実際に描画します。IKImageView を使用しているため、文書化されていないメソッド [imageView setImage: image]; を使用できます。これは NSImage を取ります。

これまでのところ、これは私にとってはうまくいっているようです。うまくいけば、これは他の誰かに役立ちます。

于 2010-03-03T22:47:46.810 に答える
0

ビューをグラフィック コンテキストに入れることはできません。ビューは、別のビューに移動するか、ウィンドウのコンテンツ ビューとして表示されます。

そのコンテキストを現在のコンテキストとして設定し、ビューに描画するように指示することで、コンテキストにビューを描画できます。ビューを画像にレンダリングする手段としてこれを行うかもしれませんが、そうでなければ、それを行う理由が思いつきません。(編集: OK、Netscape プラグインであることはおそらく正当な理由です。)

lockFocus通常、ビューはメソッドの NSView の実装で独自のグラフィックス コンテキストを取得します。これは によってdisplay呼び出され、displayIfNeeded(ビューに表示が必要な場合のみ) によって呼び出されます。これは、イベントの一部として呼び出されます。ループ。

前述のイメージへのエクスポートのケースなど、非常にまれな状況を除いて、ビューのコンテキスト作成する必要はありません。通常、それ自体はビューに任せます。

于 2010-02-26T22:21:44.293 に答える
0

部分的な解決?

私が現在行っていることは、NSScrollView 内の IKImageView にボタンを持つペン先を作成することです。これをプラグインにロードします。

次に、NSWindow があるので、ウィンドウの contentView を取得できます。次に、スクロールビューを contentView のサブビューとして追加します。

表示されますが、原点がどこにあるかについて座標の混乱があるようです。(上と下)そして、ウィンドウ全体のコンテンツビューをいじっているので、おそらくもっとローカルにすべきことを非常にグローバルに行っています。同様に、タブを閉じたり、別のタブに移動したりしても、ビューが消えることはありません。(もちろん、ウィンドウを閉じると閉じます)

それで、これはこれを行う合理的な方法のように聞こえますか?それは少し感じます...不器用です...

于 2010-03-01T21:53:35.243 に答える