Поделиться через


Программную печать

OLE, предоставленные означает уникальным образом идентифицировать постоянные документов (GetClassFile) и загрузить их в их связанный код (CoCreateInstance, QueryInterface(IID_IPersistFile), QueryInterface(IID_IPersistStorage), IPersistFile::Load и IPersistStorage::Load).Далее, чтобы разрешить печать документов, вложенность активных документов (используя существующую структуру не ЯВЛЯЕТСЯ погруженную с 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.IPrint::GetPageInfo делает данные о разбиении на страницы отображения простым, позволяя вызывающему объекту для получения начальный номер страницы, переданного ранее SetInitialPageNum (или номер страницы документа внутренний по умолчанию начальный) и количество страниц в документе.

Объекты, поддерживающие IPrint помечены в реестре с «непечатаемым» стрелка, хранящихся в разделе CLSID объекта:

HKEY_CLASSES_ROOT \ CLSID \ {…}\ Печати

IPrint обычно реализуется на этом же объекте, который поддерживает или IPersistFile или IPersistStorage.Отметьте объекты, вызывающие возможность программно для печати постоянное состояние определенного класса, просмотрев в реестре для «непечатаемым» клавиш.В настоящее время «непечатаемым» обозначает поддержку хотя бы IPrint; другие интерфейсы могут быть указаны в будущем, которое затем будет доступно через QueryInterface, где IPrint просто представляет базовый уровень поддержки.

При выполнении процедуры печати, может потребоваться клиента или контейнер, которые начали печать для мониторинга, следует ли продолжить или не печать.Например, контейнер может поддерживать команду печать «остановить», которая должна выполнить задание печати, как можно скорее.Чтобы поддержать эту возможность, клиент непечатаемым объекта может реализовать небольшой объект приемника уведомлений с помощью интерфейса IContinueCallback:

interface IContinueCallback : IUnknown

{

HRESULT FContinue(void);

HRESULT FContinuePrinting(

[in] LONG cPagesPrinted,

[in] LONG nCurrentPage,

[in] LPOLESTR pszPrintStatus);

};

Этот интерфейс предназначен для быть полезным, как родовая функция обратного вызова продолжения, которая занимает место различных процедур продолжения в API Win32 (например AbortProc для печати и EnumMetafileProc метафайла для перечисления).Таким образом, эта конструкция интерфейса полезна в самых разнообразных трудоемких процессов.

В самых родовых случаях вызывается функция IContinueCallback::FContinue периодически любым длинномерным процессом.Объект приемников возвращает S_ОК, чтобы продолжить операцию и S_FALSE для остановки процедура как можно скорее.

FContinue, однако не используется в контексте IPrint::Print; скорее, введя использует IContinueCallback::FContinuePrint.Любой объект печати должен периодически вызывать FContinuePrinting указав число страниц, введенные, номер, печатанными страницы и строку, описывающую состояние печати, клиент может выбрать для отображения пользователю (например, «страница 5 19 ").

См. также

Основные понятия

Контейнеров активных документов