共用方式為


以程式設計方式列印

OLE 提供了唯一識別永續性檔的方法( GetClassFile ),並將其載入其相關聯的程式碼( CoCreateInstanceQueryInterface(IID_IPersistFile)QueryInterface(IID_IPersistStorage)IPersistFile::LoadIPersistStorage::Load )。 為了要進一步啟用列印文件,使用中文件內含項目 (使用現有的 OLE 設計,一開始並未隨附於 OLE 2.0) 會引入基底標準列印介面 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 支援能夠順暢地將一系列檔列印為一個,這顯然是 Office Binder 等使用中檔容器的優點。 IPrint::GetPageInfo 藉由允許呼叫端擷取先前傳遞至 SetInitialPageNum 的起始頁碼(或檔的內部預設起始頁碼),以及檔中的頁數,讓顯示分頁資訊變得簡單。

支援 IPrint 的物件在登錄中儲存物件的 CLSID 下以「Printable」機碼加以標記:

HKEY_CLASSES_ROOT\CLSID\{...}\列印

IPrint 通常會在支援 IPersistFileIPersistStorage 的相同物件上實作。 呼叫端可在登錄中查看「Printable」機碼,以記錄以程式設計方式列印一些類別保存狀態的功能。 目前,「可列印」表示至少 IPrint 支援 ;未來可能會定義其他介面,然後可透過 QueryInterface 僅代表支援基底層級的位置 IPrint 取得。

在列印程序進行期間,您可能想要初始化列印控制項的用戶端或容器控制是否應該繼續列印。 例如,容器可能支援應該儘快終止列印工作的「停止列印」命令。 若要支援這項功能,可列印物件的用戶端可以實作具有 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」)。

另請參閱

主動式文件容器