次の方法で共有


印刷プレビュー アーキテクチャ

この記事では、MFC フレームワークが印刷プレビュー機能を実装する方法について説明します。 取り上げるトピックは次のとおりです。

印刷プレビューは、デバイス上でイメージを直接描画するのではなく、画面を使用してプリンターをシミュレートする必要があるため、画面の表示と印刷とは若干異なります。 これに対応するために、Microsoft Foundation クラス ライブラリでは、 CDC クラスから派生した特別な (文書化されていない) クラスを定義し、 CPreviewDCと呼びます。 すべての CDC オブジェクトには 2 つのデバイス コンテキストが含まれていますが、通常は同じです。 CPreviewDC オブジェクトでは、これらは異なります。1 つ目はシミュレート対象のプリンターを表し、2 つ目は出力が実際に表示される画面を表します。

印刷プレビュー プロセス

ユーザーが [ ファイル ] メニューから [印刷プレビュー] コマンドを選択すると、フレームワークによって CPreviewDC オブジェクトが作成されます。 アプリケーションがプリンター デバイス コンテキストの特性を設定する操作を実行するたびに、フレームワークは画面のデバイス コンテキストでも同様の操作を実行します。 たとえば、アプリケーションが印刷用のフォントを選択した場合、フレームワークはプリンターフォントをシミュレートする画面表示用のフォントを選択します。 アプリケーションがプリンターに出力を送信するたびに、フレームワークは代わりに出力を画面に送信します。

印刷プレビューは、ドキュメントのページを描画する順序での印刷とは異なります。 印刷中は、特定の範囲のページがレンダリングされるまで、フレームワークは印刷ループを続行します。 印刷プレビュー中は、いつでも 1 ページまたは 2 ページが表示され、アプリケーションは待機します。ユーザーが応答するまで、それ以上のページは表示されません。 印刷プレビュー中、アプリケーションは通常の画面表示時と同様に、WM_PAINTメッセージにも応答する必要があります。

CView::OnPreparePrinting 関数は、印刷ジョブの開始時と同様に、プレビュー モードが呼び出されたときに呼び出されます。 関数に渡される CPrintInfo 構造体には 、印刷プレビュー操作の特定の特性を調整するために設定できる値を持つ複数のメンバーが含まれています。 たとえば、 m_nNumPreviewPages メンバーを設定して、ドキュメントを 1 ページ モードでプレビューするか、2 ページ モードでプレビューするかを指定できます。

印刷プレビューの変更

印刷プレビューの動作と外観は、さまざまな方法で簡単に変更できます。 たとえば、次のようなことができます。

  • 文書の任意のページに簡単にアクセスできるように、印刷プレビュー ウィンドウにスクロール バーが表示されます。

  • 現在のページで表示を開始して、印刷プレビューでドキュメント内のユーザーの位置を維持させます。

  • 印刷プレビューと印刷に対して異なる初期化を実行します。

  • 印刷プレビューでページ番号を独自の形式で表示します。

ドキュメントの長さを把握し、適切な値で SetMaxPage を呼び出す場合、フレームワークはプレビュー モードで、また印刷中にこの情報を使用できます。 フレームワークは、ドキュメントの長さを認識したら、プレビュー ウィンドウにスクロール バーを提供し、ユーザーがプレビュー モードでドキュメントを前後にページングできるようにします。 ドキュメントの長さを設定していない場合、フレームワークは現在の位置を示すためにスクロール ボックスを配置できないため、フレームワークはスクロール バーを追加しません。 この場合、ユーザーは、プレビュー ウィンドウのコントロール バーの [次のページ] ボタンと [前のページ] ボタンを使用して、ドキュメントをページングする必要があります。

印刷プレビューでは、通常の印刷では行わない場合でも、CPrintInfom_nCurPageメンバーに値を割り当てると便利な場合があります。 通常の印刷中、このメンバーはフレームワークからビュー クラスに情報を運びます。 これは、どのページを印刷するかをフレームワークがビューに指示する方法です。

これに対し、印刷プレビュー モードが開始されると、 m_nCurPage メンバーは、ビューからフレームワークに対して逆方向に情報を伝送します。 フレームワークでは、このメンバーの値を使用して、最初にプレビューするページを決定します。 このメンバーの既定値は 1 であるため、ドキュメントの最初のページが最初に表示されます。 OnPreparePrintingをオーバーライドして、印刷プレビュー コマンドが呼び出されたときに表示されるページの数にこのメンバーを設定できます。 これにより、アプリケーションは、通常の表示モードから印刷プレビュー モードに移行するときに、ユーザーの現在位置を維持します。

場合によっては、印刷ジョブまたは印刷プレビューのどちらに対して呼び出されるかに応じて、異なる初期化を実行 OnPreparePrinting 。 これは、CPrintInfo構造体の m_bPreview メンバー変数を調べることで確認できます。 印刷プレビューが呼び出されると、このメンバーは TRUE に 設定されます。

CPrintInfo構造体には、m_strPageDescという名前のメンバーも含まれています。これは、画面の下部に表示される文字列を単一ページモードおよび複数ページ モードで書式設定するために使用されます。 既定では、これらの文字列は "Page n" と "Pages n - m" の形式ですが、OnPreparePrinting内からm_strPageDescを変更し、文字列をより複雑なものに設定できます。 詳細については、MFC リファレンスCPrintInfo 構造体を参照してください。

こちらも参照ください

印刷と印刷プレビュー
印刷
CView クラス
CDC クラス