2016-03-24 10 views
-1

私はNSViewのサブクラスを印刷専用に使用していますが、印刷中にかなり複雑なものがあります。そのため、ダイアログが表示されることがあります。問題は、進捗ダイアログがスクリーンではなくプリントアウトに描画されることです。印刷中にウィンドウを表示できますか?

私は[NSGraphicsContext saveGraphicsState][NSGraphicsContext restoreGraphicsState];のウィンドウに描画する可能性のあるブラケットの場所を試しましたが、これはうまくいかなかった。

私も

[self unlockFocus]; 
[self stuffThatMightDrawAWindow]; 
[self lockFocus]; 

を試してみましたが、それは動作しませんでした。実際には、unlockFocusの直後に、unlockFocusが実際に何もしなかったかのように、[NSView focusView]がまだ私の印刷ビューを指していることがわかりました。

私は、印刷ビューのdrawRect:メソッドで印刷に描画されるようにコードを再構成しようとするべきですが、それが唯一の解決策であるかどうか不思議です。


私はrectForPage:方法、私はページ番号を知っている最初の場所ですべてのコンテンツの準備を行うためにリファクタリングを試してみました。今すぐプリントアウトがOKに見えますが、私はrectForPage:中にシンプルなモーダルNSAlertを実行した場合、アラートがボタン以外の空白です:

white alert

答えて

2

私はold (2001) post by Erik M. Buckは言った:NSViewの一方で

印刷中であれば、Window Serverへの接続は、印刷ジョブ出力への接続によって に置き換えられます。 NSViewは、印刷中にウィンドウサーバと短時間通信する必要がある場合があります( )。たとえば、 は、Window Serverにのみ格納されている一部のデータを読み取るか、または アテンションパネルを開いて、ユーザーに問題を警告する必要があります。このような場合、 はNSApplicationオブジェクトの表示コンテキスト内で一時的にスワップして、 のアプリケーションのWindow Server状態と画面へのアクセスを復元することができます。 が終了すると、ビューオブジェクトは印刷操作のコンテキストを復元し、続行するために イメージを生成します。

ので、解決策は、それは私がヒントなしで考えたことはなかっただろうと、[NSApp context]で、その二行目です

[NSGraphicsContext saveGraphicsState]; 
[NSGraphicsContext setCurrentContext: [NSApp context]]; 
[self stuffThatShowsDialogsInsteadOfPrinting]; 
[NSGraphicsContext restoreGraphicsState]; 

ました。

関連する問題