프로그래밍 방식 인쇄
OLE는 영구 문서()를 고유하게 식별하고 연결된 코드(GetClassFile
,, IPersistFile::Load
QueryInterface(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
해야 합니다.