マルチページ ドキュメント
この技術情報には、プロトコルを印刷するウィンドウについて説明し、複数のページを含む文書を印刷する方法について説明します。技術情報は、次のトピックについて説明します:
印刷のプロトコル
オーバーライドのビュー クラスの関数
改ページ
プリンターのページ対して。ドキュメント ページ
印刷時の改ページ
印刷のプロトコル
対話型マルチページのドキュメント、フレームワークとビューを次のように出力します。最初に、フレームワークは 印刷 のダイアログ ボックスが表示され、プリンターのデバイス コンテキストを作成し、 CDC のオブジェクトの StartDoc のメンバー関数をダイヤルします。次に、文書の各ページを、フレームワークは CDC のオブジェクトの StartPage のメンバー関数に呼び出され、ページを印刷するように、ビュー オブジェクトに指示し EndPage のメンバー関数をダイヤルします。プリンター モードが特定のページを開始する前に変更する必要がある場合 DEVMODE の含む構造体を新しいプリンター モードの情報に更新するビューは ResetDCをダイヤルします。文書全体が出力された場合、フレームワークは EndDoc のメンバー関数をダイヤルします。
オーバーライドのビュー クラスの関数
CView のクラスは印刷時にフレームワークによって呼び出されます複数のメンバー関数を定義します。ビュー クラスの関数をオーバーライドすることによって、フレームワークの印刷のロジックとビュー クラスの印刷ロジックの間の接続を提供します。次の表は、これらのメンバー関数を示します。
印刷の CView のオーバーライド可能な関数
名前 |
オーバーライドの原因 |
---|---|
印刷ダイアログの値を挿入して、ドキュメントの特に期間 |
|
フォントやそのほかの GDI リソースを割り当てるには |
|
デバイス コンテキストの属性を特定のページに調整するか、印刷時の改ページをするには |
|
特定のページを印刷するには |
|
GDI リソースを解放します。 |
他の関数の、印刷関連の処理ができますが、これらの関数は印刷プロセスを制御するものです。
次の図は、印刷プロセスのプロセスについて説明し、 entity_CODECView 印刷のメンバー関数のそれぞれが呼び出されるかを示します。この技術情報のそのほかは、次の手順のほとんどをより詳しく説明します。印刷プロセスの追加の一部は技術情報 GDI リソースの割り当て。で説明します。
印刷ループ
改ページ
フレームワークは CPrintInfo の構造体に印刷ジョブに関するさまざまな情報を格納します。CPrintInfo の値のいくつかは、改ページに関係します; これらの値は、次の表に示すようにアクセスできます。
CPrintInfo に格納されている情報ページ番号
メンバー変数または 関数名 |
参照されるページ数 |
---|---|
GetMinPage/SetMinPage |
ドキュメントの最初のページ |
GetMaxPage/SetMaxPage |
ドキュメントの最後のページ |
GetFromPage |
印刷される最初のページ |
GetToPage |
印刷される最後のページ |
m_nCurPage |
現在印刷するページ |
ページ数は、 1 で開始します。つまり、最初のページは 1、 0 行番号が表示されません。CPrintInfoとそのメンバーについては、 " MFC リファレンス " を参照してください。
印刷プロセスの開始時に、フレームワークは CPrintInfo の構造体へのポインターを渡すビューの OnPreparePrinting のメンバー関数をダイヤルします。アプリケーション ウィザードは DoPreparePrintingをダイヤルする OnPreparePrinting の実装、 CViewの別のメンバー関数を提供します。DoPreparePrinting は印刷ダイアログを表示する、プリンター デバイス コンテキストを作成する関数です。
この時点で、アプリケーションは、ページが文書内にあるかわかりません。では、第 1 の数とドキュメントの最後のページの既定値 1 および 0xFFFF を使用します。ページ数がドキュメントにあるかわかっている場合は、 DoPreparePrintingに送信する前に OnPreparePrinting をオーバーライドし、 CPrintInfo の構造体に SetMaxPage をダイヤルします。これはドキュメントの期間を指定できるようにします。
DoPreparePrinting は、印刷ダイアログを表示します。これが返されるとき、 CPrintInfo の構造は、ユーザーが指定した値を含みます。ユーザーがページの領域だけを印刷する場合は、自分が印刷ダイアログで開始および終了ページ数を指定できます。フレームワークは CPrintInfoの GetFromPage と GetToPage 関数を使用してこれらの値を取得します。ユーザーがページ範囲を指定しない場合、フレームワークは GetMinPage と GetMaxPage をダイヤルし、文書全体を印刷するにより返される値が使用されます。
印刷されるドキュメントの各ページについて、フレームワークはビュー クラス、 OnPrepareDC と OnPrintの 2 種類のメンバー関数をダイヤルし、各関数に 2 個のパラメーターを渡します: CPrintInfo の構造体への CDC のオブジェクトへのポインターやポインター。フレームワークは OnPrepareDC と OnPrintをダイヤルするたびに、 CPrintInfo の構造体の m_nCurPage のメンバーの異なる値を渡します。このように、フレームワークは、ページが印刷する必要があるまたはビューに指示します。
OnPrepareDC のメンバー関数は、画面表示に使用されます。これはデバイス コンテキストに描画実行する前に変更されます。OnPrepareDC は印刷のようなロールを実行しますが、いくつかの違いがあります: 最初に、 CDC のオブジェクトは、画面デバイス コンテキストの代わりにプリンター デバイス コンテキストを表し、二つ目に、 CPrintInfo のオブジェクトが 2 番目のパラメーターとして渡されます。(このパラメーターは OnPrepareDC が画面表示に対して初めて呼び出されたとき NULL です)。どのページに基づいてデバイス コンテキストするに OnPrepareDC を印刷されるかに調整をオーバーライドします。たとえば、ビューポートの起点とドキュメントの適切な部分が印刷されるように、クリッピング領域を移動できます。
OnPrint のメンバー関数は、ページの実際の印刷を実行します。印刷を実行するために、フレームワークがプリンター デバイス コンテキストの OnDraw をダイヤルするか技術情報 既定の印刷がどのように実行するか は示します。具体的には、 CPrintInfo の構造とデバイス コンテキストのフレームワークの呼び出し OnPrint 、および OnPrint のパス OnDrawへのデバイス コンテキスト。印刷時にだけで、画面表示にする必要のあるレンダリングを実行するに OnPrint をオーバーライドします。たとえば、ヘッダーまたはフッターを印刷するには (詳細については、技術情報 ヘッダーとフッター を参照してください)。その後、画面表示および印刷の両方に共通をレンダリングする OnPrint のオーバーライドの呼び出し OnDraw 。
OnDraw が画面表示および印刷の両方のレンダリングを行うと、アプリケーションが WYSIWYG であることを意味します: 「表示される内容」。派生したものであるかただし、 WYSIWYG アプリケーションを記述しないとします。たとえば、画面の太字テキストを示す印刷表示の制御コードに太字フォントを使用するテキスト エディターを検討してください。このような状況では、画面の表示に OnDraw をのみ使用します。OnPrintをオーバーライドすると、別の描画の関数呼び出しを持つ OnDraw に呼び出しに置き換えます。関数は、ドキュメントを方法、描画して、表示、画面に表示属性を使用してフォームで。
プリンターのページ対して。ドキュメント ページ
ページ番号を参照すると、プリンターのページの概念とドキュメントのページの概念を区別する必要が生じることがあります。プリンターの観点から、ページは 1 枚の紙です。ただし、 1 枚の紙は必ずしもドキュメントの 1 ページにありません。たとえば、シートになりますニュースレターを 1 枚の紙ドキュメントの両方の最初と最後のページを含める必要があります。同時に出力されます。同様に、スプレッドシートを表示すると、ドキュメントはページからまったく含まれていません。代わりに、 1 枚の紙、行 1 から 20 の 6 ~ 10. 列にが含まれる場合があります。
CPrintInfo の構造体のすべてのページ番号はプリンターのページを参照します。フレームワークは、プリンターを通過紙ごとに OnPrepareDC と OnPrint を一度ダイヤルします。ドキュメントの期間を指定するに OnPreparePrinting の関数をオーバーライドするときはプリンターのページを使用します。1 対 1 の対応が (つまり、 1 種類のプリンターのページは 1 のドキュメント ページに等しい場合)の場合、これは簡単です。一方、は、ドキュメント ページとプリンターのページが直接対応しない場合、その型の間で変換します。たとえば、スプレッドシートを印刷することを検討してください。OnPreparePrintingをオーバーライドするときは、 CPrintInfoの SetMaxPage のメンバー関数を呼び出したとき全体のスプレッドシートを出力し、その値を使用するために、枚紙が必要かを判定します。同様に、オーバーライドの OnPrepareDCで、そのシートに表示され、ビューポートの起点を適宜変更する列と行の範囲に m_nCurPage を変換する必要がある場合。
印刷時の改ページ
状況によっては、ビュー クラスは実際に印刷されるまでドキュメントがどの程度あるかを事前に確認できない場合があります。たとえば、印刷された場合、アプリケーションが WYSIWYG ではありません。したがって、画面上のドキュメントの存続期間が期間に対応しないとします。
これは、ビュー クラスの OnPreparePrinting をオーバーライドすると問題が発生します: ドキュメントの存続期間がわからないため CPrintInfo の構造体の SetMaxPage の関数に値を渡すことはできません。ユーザーが印刷ダイアログの使用で停止するには、ページ番号を指定する印刷ループをいつ停止またはフレームワークはわかりません。を判断するには印刷ループをいつ停止またはドキュメントを表示して終了すると調べることです。クラス ビューはドキュメントの末尾が末尾に達すると検証し印刷されると、フレームワークを通知する必要があります。
フレームワークは、ビュー クラスと OnPrepareDC の関数にいつ停止する、それを知らせるにしています。OnPrepareDCに対する各呼び出しに、フレームワーク m_bContinuePrintingという CPrintInfo の構造体のメンバーをチェックした後。その既定値はです **TRUE.**この場合の間、フレームワークは印刷ループが継続されます。これが FALSEに設定されている場合、フレームワークは停止します。持つ場合の印刷時の改ページ、オーバーライド OnPrepareDC 、および設定 m_bContinuePrinting を実行するドキュメントの末尾に到達した FALSE するかどうかをチェックする。
OnPrepareDC の既定の実装は FALSE に m_bContinuePrinting を現在のページの大きい 1. 設定します。これはドキュメントは、 1 ページであることをドキュメントの存続期間が指定されていない場合、フレームワークは想定することを意味します。これは、次の 1 とおりの結果は OnPrepareDCの基本クラス バージョンをダイヤルする場合は注意する必要があります。m_bContinuePrinting が基本クラスのバージョンを呼び出した後 TRUE であると想定しないでください。