プログラムによる印刷
OLE は、永続的なドキュメント (GetClassFile)を識別し、関連するコード (CoCreateInstance、 QueryInterface(IID_IPersistFile)、 QueryInterface(IID_IPersistStorage)、 IPersistFile::Loadと IPersistStorage::Load)に読み込むための方法を提供します。さらに印刷のドキュメントを有効にするには、アクティブ ドキュメントのコンテインメントは OLE 2.0 とともに出荷されていない既存の OLE デザインを使用してベース)標準印刷インターフェイス、 IPrint、一般に使用できる、ドキュメントを型の永続的な状態を読み込むことができる任意のオブジェクト説明します。アクティブ ドキュメントの各ビューは、オプションでこれらの機能を提供するために IPrint インターフェイスをサポートできます。
IPrint インターフェイスは次のように定義されます:
interface IPrint : IUnknown
{
HRESULT SetInitialPageNum([in] LONG nFirstPage);
HRESULT GetPageInfo(
[out] LONG *pnFirstPage,
[out] LONG *pcPages);
HRESULT Print(
[in] DWORD grfFlags,
[in,out] DVTARGETDEVICE **pptd,
[in,out] PAGESET ** ppPageSet,
[in,out] STGMEDIUM **ppstgmOptions,
[in] IContinueCallback* pCallback,
[in] LONG nFirstPage,
[out] LONG *pcPagesPrinted,
[out] LONG *pnPageLast);
};
印刷する印刷の制御を、ターゲット デバイス指定する、ドキュメント ページが読み込まれること自体を一度印刷するドキュメントに指示するクライアントと単にコンテナーを使用 IPrint::Print と追加のオプション。クライアントは、インターフェイス IContinueCallback (下記参照)によって印刷の継続を制御できます。
また、 IPrint::SetInitialPageNum により、ページング番号によって 1 つがとして一連のドキュメント、マニフェストに Office バインダーのようなアクティブ ドキュメント コンテナーの利点を印刷できます。IPrint::GetPageInfo により、改ページ情報を呼び出し元の前に SetInitialPageNum (またはページ番号を開始するドキュメントの内部既定)に渡されるスタート ページ番号とドキュメントのページの数を取得できるため、簡単に表示されます。
IPrint をサポートするオブジェクトは、オブジェクトの CLSID の下に格納されている 「印刷できる」キーを使用してレジストリでマークされています:
HKEY_CLASSES_ROOT \CLSID\{…}\Printable
IPrint は、通常 IPersistFile か IPersistStorageをサポートする同じオブジェクトで実行されます。呼び出し元は、プログラムでレジストリで印刷する機能に 「印刷できる」キーを参照して、クラスの永続的な状態を確認します。現在、 「印刷できる」少なくとも IPrintのサポートを示します; IPrint がサポートの基本レベルを表す QueryInterface で使用できるそのほかのインターフェイスは、将来定義されることがあります。
印刷手順の間に、印刷を続ける必要があるかどうかを制御するに印刷を開始したコンテナーまたはクライアントが必要になる場合があります。たとえば、コンテナーは印刷ジョブをできるだけ早く終了する必要がある 「Stop」印刷コマンドをサポートする場合があります。この機能をサポートするには、印刷できるオブジェクトのクライアントは、インターフェイス IContinueCallbackを持つ小さい通知シンク オブジェクトを実行する場合:
interface IContinueCallback : IUnknown
{
HRESULT FContinue(void);
HRESULT FContinuePrinting(
[in] LONG cPagesPrinted,
[in] LONG nCurrentPage,
[in] LPOLESTR pszPrintStatus);
};
このインターフェイスは、 Win32 API のさまざまな連結プロシージャの代わりに使用する一般的な継続のコールバック関数として利用として設計されています (印刷の AbortProc 、メタファイルの列挙の EnumMetafileProc など)。このインターフェイスのデザインは、さまざまな時間がかかってに便利です。
最も一般的なケースでは、 IContinueCallback::FContinue の関数は長いプロセスによって定期的に呼び出されます。シンク オブジェクトはプロシージャをできるだけ早く停止し、操作を継続 S_OK と S_FALSE を返します。
ただし、FContinueは IPrint::Printのコンテキストで使用できません; なく、使用 IContinueCallback::FContinuePrintを出力します。どの印刷のオブジェクトが定期的に印刷するページの数、印刷するページの数と選択するクライアントがユーザーに表示する可能性がある、印刷状態を示す文字列を渡す FContinuePrinting をダイヤルする必要があります (「5 19 " のページなど)。