次の方法で共有


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

ここでは、MFC フレームワークの印刷プレビュー機能がどのように実装されるかについて説明します。 ここでは、次の内容について説明します。

  • 印刷プレビューの処理

  • 印刷プレビューの変更

印刷プレビューは、デバイス上に直接イメージを描画するのではなく、画面を使用してプリンターをシミュレートするものであるため、画面表示と印刷とはいくらか異なります。 この問題に対応するために、MFC (Microsoft Foundation Class) ライブラリには、CDC クラス から派生した CPreviewDC という特殊な (非公開の) クラスが定義されています。 すべての CDC オブジェクトには 2 つのデバイス コンテキストがありますが、この 2 つは通常同じものです。 CPreviewDCオブジェクト、彼らは異なる。最初のシミュレートされたプリンター、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 メンバーでは、単一ページ モードおよび複数ページ モードで画面の下部に表示される文字列の書式を設定できます。 既定では、この文字列は "ページ n" および "ページ n -m" という形式になっていますが、OnPreparePrinting 関数で m_strPageDesc を変更してより精密な形式にできます。 詳細については、『MFC リファレンス』の「CPrintInfo 構造体」を参照してください。

参照

参照

印刷および印刷プレビュー

印刷

CView クラス

CDC クラス