Bagikan melalui


Pencetakan Terprogram

OLE menyediakan sarana untuk mengidentifikasi dokumen persisten secara unik (GetClassFile) dan memuatnya ke dalam kode terkait mereka (CoCreateInstance, , QueryInterface(IID_IPersistFile)QueryInterface(IID_IPersistStorage), IPersistFile::Load, dan IPersistStorage::Load). Untuk lebih mengaktifkan dokumen pencetakan, penahanan dokumen aktif (menggunakan desain OLE yang ada yang tidak dikirim dengan OLE 2.0 awalnya) memperkenalkan antarmuka pencetakan standar dasar, , IPrintumumnya tersedia melalui objek apa pun yang dapat memuat status persisten jenis dokumen. Setiap tampilan dokumen aktif dapat secara opsional mendukung IPrint antarmuka untuk menyediakan kemampuan ini.

Antarmuka IPrint didefinisikan sebagai berikut:

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

Klien dan kontainer hanya menggunakan IPrint::Print untuk menginstruksikan dokumen untuk mencetak dirinya sendiri setelah dokumen tersebut dimuat, menentukan bendera kontrol pencetakan, perangkat target, halaman yang akan dicetak, dan opsi tambahan. Klien juga dapat mengontrol kelanjutan pencetakan melalui antarmuka IContinueCallback (lihat di bawah).

Selain itu, IPrint::SetInitialPageNum mendukung kemampuan untuk mencetak serangkaian dokumen sebagai satu dengan menomori halaman dengan mulus, jelas merupakan manfaat untuk kontainer dokumen aktif seperti Office Binder. IPrint::GetPageInfo membuat tampilan informasi penomoran halaman menjadi sederhana dengan memungkinkan pemanggil untuk mengambil nomor halaman awal yang sebelumnya diteruskan ke SetInitialPageNum (atau nomor halaman awal default internal dokumen) dan jumlah halaman dalam dokumen.

Objek yang mendukung IPrint ditandai dalam registri dengan kunci "Dapat Dicetak" yang disimpan di bawah CLSID objek:

HKEY_CLASSES_ROOT\CLSID\{...} \Dicetak

IPrint biasanya diimplementasikan pada objek yang sama yang mendukung atau IPersistFile IPersistStorage. Penelepon mencatat kemampuan untuk mencetak status persisten beberapa kelas secara terprogram dengan melihat di registri untuk kunci "Dapat Dicetak". Saat ini, "Dapat dicetak" menunjukkan dukungan untuk setidaknya IPrint; antarmuka lain dapat didefinisikan di masa depan yang kemudian akan tersedia di QueryInterface mana IPrint hanya mewakili tingkat dukungan dasar.

Selama prosedur cetak, Anda mungkin ingin klien atau kontainer yang memulai pencetakan mengontrol apakah pencetakan harus dilanjutkan atau tidak. Misalnya, kontainer dapat mendukung perintah "Hentikan Cetak" yang harus mengakhiri pekerjaan cetak sesegera mungkin. Untuk mendukung kemampuan ini, klien objek yang dapat dicetak dapat mengimplementasikan objek sink pemberitahuan kecil dengan antarmuka IContinueCallback:

interface IContinueCallback : IUnknown
    {
    HRESULT FContinue(void);
    HRESULT FContinuePrinting(
        [in] LONG cPagesPrinted,
        [in] LONG nCurrentPage,
        [in] LPOLESTR pszPrintStatus);
    };

Antarmuka ini dirancang untuk berguna sebagai fungsi panggilan balik kelanjutan generik yang menggantikan berbagai prosedur kelanjutan di API Win32 (seperti AbortProc untuk pencetakan dan EnumMetafileProc untuk enumerasi metafile). Dengan demikian desain antarmuka ini berguna dalam berbagai proses yang memakan waktu.

Dalam kasus yang paling umum, IContinueCallback::FContinue fungsi ini dipanggil secara berkala oleh proses panjang apa pun. Objek sink mengembalikan S_OK untuk melanjutkan operasi, dan S_FALSE untuk menghentikan prosedur sesegera mungkin.

FContinue, namun, tidak digunakan dalam konteks IPrint::Print; melainkan, pencetakan menggunakan IContinueCallback::FContinuePrint. Setiap objek pencetakan harus secara berkala memanggil FContinuePrinting melewati jumlah halaman yang telah dicetak, jumlah halaman yang dicetak, dan string tambahan yang menjelaskan status cetak yang dapat dipilih klien untuk ditampilkan kepada pengguna (seperti "Halaman 5 dari 19").

Baca juga

Kontainer Dokumen Aktif