既定の印刷プロセス
更新 : 2007 年 11 月
ここでは、MFC フレームワークの観点から Windows の既定の印刷プロセスについて説明します。
MFC を使用して作成したアプリケーションでは、描画用のコード全体がビュー クラスの OnDraw メンバ関数に含まれます。OnDraw メンバ関数は、CDC オブジェクトへのポインタを引数として受け取ります。CDC オブジェクトは、OnDraw メンバ関数が生成したイメージを受け取るデバイス コンテキストを表します。ドキュメントを表示するウィンドウが WM_PAINT メッセージを受け取ると、フレームワークは OnDraw を呼び出して、画面を表すデバイス コンテキスト (具体的には CPaintDC オブジェクト) に渡します。その結果、OnDraw の出力が画面に送られることになります。
Windows のプログラミングでは、プリンタへの出力と画面への出力はよく似ています。これは、Windows グラフィック ディバイス インターフェイス (GDI: Graphics Device Interface) がハードウェアに依存しないためです。デバイス コンテキストを変更するだけで、画面表示や印刷の処理に同じ GDI 関数を使用できます。OnDraw が受け取る CDC オブジェクトがプリンタを表す場合、OnDraw による出力内容はプリンタに送られます。
つまり、MFC を使用したアプリケーションでは、追加の作業を行わずに簡単に印刷できます。フレームワークは [印刷] ダイアログ ボックスの表示と、プリンタのデバイス コンテキスト作成を扱います。[ファイル] メニューの [印刷] をクリックすると、ビューによってこのデバイス コンテキストが OnDraw 関数に渡され、ドキュメントはプリンタに出力されます。
ただし、印刷と画面表示には、重要な違いがいくつかあります。印刷を実行するときは、ウィンドウの大きさで可視になる部分を適切に表示するのではなく、ドキュメントを複数のページ区切りで分割し、1 ページずつ出力する必要があります。その結果、用紙サイズ (A4 サイズ、B5 サイズ、封筒サイズなど) を事前に認識する必要があります。横向きモードや縦向きモードなど、印刷の向きが異なる場合もあります。MFC (Microsoft Foundation Class) ライブラリには、アプリケーション側の処理を予測できないために、印刷機能を追加するためのプロトコルが用意されています。
プロトコルについては、「マルチページ ドキュメント」で説明します。