Udostępnij za pośrednictwem


Drukowanie programowy

OLE, pod warunkiem oznacza jednoznacznie trwałe dokumentów (GetClassFile) i załadować je do ich kod skojarzony (CoCreateInstance, QueryInterface(IID_IPersistFile), QueryInterface(IID_IPersistStorage), IPersistFile::Load, i IPersistStorage::Load).Aby umożliwić dalsze drukowanie dokumentów, zamknięcia aktywnego dokumentu (przy użyciu istniejącego projektu OLE nie wysłane z OLE 2.0 pierwotnie) wprowadza base standard interfejsu drukowania, IPrint, ogólnie dostępne za pośrednictwem dowolnego obiektu, który można załadować trwały stan typ dokumentu.Każdy widok aktywnego dokumentu można opcjonalnie obsługiwać IPrint interfejsu oferują te funkcje.

IPrint Interfejsu jest zdefiniowany następująco:

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);

};

Klienci i pojemników po prostu użyć IPrint::Print do dokumentu do druku sam po tego dokumentu jest załadowany, określając drukowania flagi kontroli, urządzenia docelowego, strony do drukowania oraz dodatkowe opcje.Klient można również sterować kontynuacji drukowanie za pośrednictwem interfejsu IContinueCallback (patrz poniżej).

Ponadto IPrint::SetInitialPageNum obsługuje możliwość drukowania dokumentów w jednym numerowania stron bezproblemowo, oczywiście korzyści dla kontenerów aktywnego dokumentu, takich jak program Office Binder.IPrint::GetPageInfo ułatwia wyświetlania informacji o podział na strony proste pozwalając rozmówcy pobrać początkowej strony numer uprzednio przekazane do SetInitialPageNum (lub dokument domyślny wewnętrzny numer strony początkowej) oraz liczba stron w dokumencie.

Obiekty, które obsługują IPrint , są oznaczone w rejestrze klucza "Drukowalne" przechowywane pod CLSID obiektu:

HKEY_CLASSES_ROOT\CLSID\ {...}\Printable

IPrintZazwyczaj jest realizowane na ten sam obiekt, który obsługuje albo IPersistFile lub IPersistStorage.Wywołujący Uwaga programowo drukowanie trwały stan niektóre klasy patrząc w rejestrze w kluczu "Drukowalne".Obecnie "Drukowalne" oznacza obsługę przynajmniej IPrint; inne interfejsy mogą być określone w przyszłości, które przestaną być dostępne za pośrednictwem QueryInterface gdzie IPrint po prostu reprezentuje base poziom wsparcia.

Podczas drukowania procedury może być klienta lub kontener, który zainicjował drukowania do kontrolowania, czy należy kontynuować drukowanie.Na przykład kontener może obsługiwać powinien jak najszybciej zakończyć zadanie drukowania polecenie "Zatrzymaj drukowanie".Do obsługi tej funkcji, klient drukowalne obiektu można zaimplementować obiekt sink małych powiadomienie z interfejsem IContinueCallback:

interface IContinueCallback : IUnknown

{

HRESULT FContinue(void);

HRESULT FContinuePrinting(

[in] LONG cPagesPrinted,

[in] LONG nCurrentPage,

[in] LPOLESTR pszPrintStatus);

};

Ten interfejs jest zaprojektowany użyteczne jako rodzajowy kontynuacji funkcji zwrotnej, która ma miejsce w różnych procedur kontynuacji w Win32 API (takie jak AbortProc do drukowania i EnumMetafileProc wyliczenie metafile).Ten sposób projektowania interfejsu jest użyteczne w różnorodnych procesów czasochłonne.

W przypadkach, najbardziej ogólny IContinueCallback::FContinue funkcja jest wywoływana okresowo przez każdy proces długotrwały.Zwraca obiekt sink S_OK , aby kontynuować operację, i S_FALSE zatrzymać procedury jak najszybciej.

FContinue, jednak nie jest używany w kontekście IPrint::Print; Drukowanie raczej zastosowań IContinueCallback::FContinuePrint.Każdy obiekt drukowania okresowo powinna wywołać FContinuePrinting przekazując liczbę stron, które mają zostały drukowania, numer strony, drukowane i dodatkowe ciąg, opisujące stan drukowania, które klient może wybrać wyświetlanie do użytkownika (na przykład "strona 5 19").

Zobacz też

Koncepcje

Aktywny dokument kontenerów