다음을 통해 공유


프로그래밍 방식 인쇄

OLE는 영구 문서()를 고유하게 식별하고 연결된 코드(GetClassFile,, IPersistFile::LoadQueryInterface(IID_IPersistFile)QueryInterface(IID_IPersistStorage)IPersistStorage::Load)에 로드하는 수단을 제공했습니다.CoCreateInstance 문서 인쇄를 더욱 활성화하기 위해 현재 문서 포함(원래 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 페이지를 원활하게 번호 매기는 방식으로 일련의 문서를 하나씩 인쇄하는 기능을 지원합니다. Office Binder와 같은 활성 문서 컨테이너에는 분명히 이점이 있습니다. IPrint::GetPageInfo 는 호출자가 이전에 전달된 시작 페이지 번호(또는 문서의 내부 기본 시작 페이지 번호) 및 문서의 페이지 수를 검색할 SetInitialPageNum 수 있도록 하여 페이지 매김 정보를 간단하게 표시합니다.

지원하는 IPrint 개체는 개체의 CLSID 아래에 저장된 "인쇄 가능" 키를 사용하여 레지스트리에 표시됩니다.

HKEY_CLASSES_ROOT\CLSID\{...} \인쇄용

IPrint 는 일반적으로 둘 중 하나 IPersistFile 또는 IPersistStorage를 지원하는 동일한 개체에서 구현됩니다. 호출자는 레지스트리에서 "인쇄 가능" 키를 확인하여 일부 클래스의 영구 상태를 프로그래밍 방식으로 인쇄하는 기능을 확인합니다. 현재 "인쇄 가능"은 적어도 IPrint지원을 나타냅니다. 다른 인터페이스는 나중에 정의될 수 있으며, 이 인터페이스는 단순히 기본 지원 수준을 나타내는 위치를 IPrint 통해 QueryInterface 사용할 수 있습니다.

인쇄 프로시저 중에 인쇄를 시작한 클라이언트 또는 컨테이너가 인쇄를 계속할지 여부를 제어하도록 할 수 있습니다. 예를 들어 컨테이너는 가능한 한 빨리 인쇄 작업을 종료해야 하는 "인쇄 중지" 명령을 지원할 수 있습니다. 이 기능을 지원하기 위해 인쇄 가능한 개체의 클라이언트는 인터페이스 IContinueCallback를 사용하여 작은 알림 싱크 개체를 구현할 수 있습니다.

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

이 인터페이스는 Win32 API의 다양한 연속 프로시저(예: 인쇄용 및 EnumMetafileProc 메타파일 열거형)를 대신하는 제네릭 연속 콜백 함수로 AbortProc 유용하게 설계되었습니다. 따라서 이 인터페이스 디자인은 시간이 많이 걸리는 다양한 프로세스에서 유용합니다.

대부분의 일반적인 경우 IContinueCallback::FContinue 함수는 긴 프로세스에 의해 주기적으로 호출됩니다. 싱크 개체는 작업을 계속하기 위해 S_OK 반환하고 가능한 한 빨리 프로시저를 중지하도록 S_FALSE.

FContinue그러나, 의 컨텍스트 IPrint::Print에서 사용되지 않습니다; 오히려 인쇄 사용 IContinueCallback::FContinuePrint. 인쇄 개체는 인쇄된 페이지 수, 인쇄되는 페이지 수 및 클라이언트가 사용자에게 표시하도록 선택할 수 있는 인쇄 상태 설명하는 추가 문자열(예: "19페이지 5")을 주기적으로 전달하도록 호출 FContinuePrinting 해야 합니다.

참고 항목

액티브 문서 컨테이너