액티브 문서
액티브 문서는 OLE의 복합 문서 기술을 확장합니다.이러한 확장 개체 컨테이너 내에서 작동 하 고 아직 컨트롤의 표시 및 인쇄 기능을 유지할 수 있도록 하는 보기를 관리 하는 추가 인터페이스의 형태로 제공 됩니다.이 프로세스 외부 프레임 (예: Microsoft Internet Explorer 또는 Microsoft Office 바인더) 및 포트 제품의 보기) (같은 네이티브 프레임에 문서를 표시할 수 있습니다.
이 절은 기능 설명 액티브 문서의 요구 사항.현재 문서의 데이터 집합을 소유 하 고 액세스 저장소 위치 데이터를 저장 하 고 검색할 수 있습니다.만든 다음 하나 이상의 보기에서 데이터를 관리할 수 있습니다.일반적인 포함 및 OLE 문서의 현재 위치에서 활성화 인터페이스를 지 원하는 것 외에 현재 문서의 뷰를 만들 수 있는 기능과 통신 IOleDocument.이 인터페이스를 통해 컨테이너 만들기 (및 가능한 경우 열거) 액티브 문서가 표시할 수 있는 뷰 요청할 수 있습니다.이 인터페이스를 통해 현재 문서의 여러 뷰 또는 복잡 한 사각형 지원 여부와 같은 기타 정보 자체를 제공할 수도 있습니다.
다음은 IOleDocument 인터페이스입니다.이때의 IEnumOleDocumentViews 인터페이스에 대 한 표준 OLE 표시기입니다 IOleDocumentView * 형식입니다.
interface IOleDocument : IUnknown
{
HRESULT CreateView(
[in] IOleInPlaceSite *pIPSite,
[in] IStream *pstm,
[in] DWORD dwReserved,
[out] IOleDocumentView **ppView);
HRESULT GetDocMiscStatus([out] DWORD *pdwStatus);
HRESULT EnumViews(
[out] IEnumOleDocumentViews **ppEnum,
[out] IOleDocumentView **ppView);
}
모든 액티브 문서 뷰 프레임 공급자가 인터페이스가 있어야 합니다.문서가 컨테이너에 포함 되어 있지 않은 경우 해당 액티브 문서 서버 뷰 프레임을 제공 해야 합니다.그러나 액티브 문서는 액티브 문서 컨테이너에 포함 되 면 컨테이너 보기 프레임을 제공 합니다.
액티브 문서 유형을 하나 이상 만들 수 있습니다 보기 의 데이터 (예, 보통, 개요, 레이아웃, 페이지 등).뷰를 통해 데이터를 볼 수 있는 필터와 같은 역할을 합니다.문서 보기 중 하나만 있는 경우에, 여러 보기의 새 창 기능을 지 원하는 수단으로 지원 하 시겠습니까 수도 있습니다 (예를 들어, 있는 새 창 항목에 창 Office 응용 프로그램에서 메뉴).
활성 문서에 대 한 요구 사항
액티브 문서는 액티브 문서 컨테이너에 표시 될 수 있어야 합니다.
구현 하 여 해당 저장소 메커니즘으로 사용 하는 OLE의 복합 파일 IPersistStorage.
OLE 포함 하 여 문서의 기본적인 포함 기능을 지 원하는 파일 로부터 만들기.이 인터페이스는 해야 할 IPersistFile, IOleObject, 및 IDataObject.
각각의 내부 활성화가 가능 하나 이상의 뷰를 지원 합니다.즉, 뷰 인터페이스를 지원 해야 IOleDocumentView 뿐만 아니라 인터페이스 IOleInPlaceObject 및 IOleInPlaceActiveObject (컨테이너를 사용 하 여 IOleInPlaceSite 및 IOleInPlaceFrame 인터페이스).
현재 문서의 표준 인터페이스를 지 원하는 IOleDocument, IOleCommandTarget, 및 IPrint.
때 필요한 지식과 컨테이너 쪽 인터페이스를 사용 하는 방법에 이러한 요구 사항을 암시.
뷰 개체에 대 한 요구 사항
액티브 문서는 하나 이상의 데이터 뷰를 만들 수 있습니다.기능적으로 포트 특정 데이터 표시 방법에 이러한 보기입니다.액티브 문서 및 뷰만 액티브 문서가 하나의 뷰만 지는 구현할 수 있습니다 단일 클래스를 사용 합니다.IOleDocument::CreateView 같은 개체를 반환 합니다. IOleDocumentView 인터페이스 포인터입니다.
액티브 문서 컨테이너 내에서 표현 하는, 보기 구성 요소 지원 해야 IOleInPlaceObject 및 IOleInPlaceActiveObject 뿐만 아니라 IOleDocumentView:
interface IOleDocumentView : IUnknown
{
HRESULT SetInPlaceSite([in] IOleInPlaceSite *pIPSite);
HRESULT GetInPlaceSite([out] IOleInPlaceSite **ppIPSite);
HRESULT GetDocument([out] IUnknown **ppunk);
[input_sync] HRESULT SetRect([in] LPRECT prcView);
HRESULT GetRect([in] LPRECT prcView);
[input_sync] HRESULT SetRectComplex(
[in] LPRECT prcView,
[in] LPRECT prcHScroll,
[in] LPRECT prcVScroll,
[in] LPRECT prcSizeBox);
HRESULT Show([in] BOOL fShow);
HRESULT UIActivate([in] BOOL fUIActivate);
HRESULT Open(void);
HRESULT CloseView([in] DWORD dwReserved);
HRESULT SaveViewState([in] IStream *pstm);
HRESULT ApplyViewState([in] IStream *pstm);
HRESULT Clone(
[in] IOleInPlaceSite *pIPSiteNew,
[out] IOleDocumentView **ppViewNew);
}
모든 보기 보기 프레임 및 뷰포트 (HWND 및 해당 창의 사각형 영역)을 캡슐화 하는 관련된 뷰 사이트가 있습니다.사이트가이 기능을 통해 표준 노출 IOleInPlaceSite 인터페이스입니다.메모를 둘 이상의 보기 포트는 단일 HWND 배치할 수 있습니다.
일반적으로 각 뷰 형식에 서로 다른 인쇄 된 표현이 있습니다.따라서 뷰와 해당 사이트 보기 인쇄 인터페이스 경우 구현 해야 IPrint 및 IContinueCallback, 각각.보기 공급자를 통해 해당 뷰 프레임 협상 해야 IPrint 때 인쇄가 시작 됩니다, 머리글, 바닥글, 여백 및 관련된 요소를 제대로 인쇄 되도록 합니다.보기 공급자 프레임 인쇄 관련 이벤트를 통해 알립니다 IContinueCallback.이러한 인터페이스 사용에 대 한 자세한 내용은 참조 하십시오. 프로그래밍 방식으로 인쇄.
Note만 액티브 문서가 하나의 뷰만 지 고 해당 액티브 문서 및 뷰는 단일 구체 클래스를 사용 하 여 구현할 수 있습니다 것입니다.IOleDocument::CreateView 단순히 동일한 개체를 반환 합니다. IOleDocumentView 인터페이스 포인터입니다.즉, 하나의 뷰만 필요한 경우에 두 개의 개별적인 개체 인스턴스가 있을 필요가 없습니다.
View 개체에 명령 대상이 될 수도 있습니다.구현 IOleCommandTarget 보기 컨테이너의 사용자 인터페이스는 명령 받을 수 있습니다 (같은 New, 열기, 다른 이름으로 저장, 인쇄 에 파일 메뉴; and Copy, Paste, Undo on the Edit menu).자세한 내용은 메시지 처리 및 명령 대상를 참조하십시오.