빌드 미리 보기 처리기
이 항목에서는 미리 보기 처리기를 만드는 데 필요한 특정 인터페이스 및 메서드에 대해 설명합니다.
미리 보기 처리기는 다음 인터페이스를 구현해야 합니다.
- IInitializeWithStream::Initialize (강력하게 선호), IInitializeWithFile 또는 IInitializeWithItem
- IObjectWithSite
- IOleWindow
- IPreviewHandler
미리 보기 처리기가 배경색 및 글꼴과 같은 호스트에서 제공하는 시각적 설정을 지원하는 경우 다음 인터페이스도 구현해야 합니다.
이 항목에서는 미리 보기 처리기가 스트림을 사용하여 초기화되고 특정 파일 이름 확장명용으로 등록되었다고 가정합니다.
IInitializeWithStream::Initialize
항목을 미리 볼 준비가 되면 항목의 데이터를 읽을 수 있도록 IStream 및 모드 매개 변수를 저장합니다. 초기화에서 데이터를 로드하지 마세요. 렌더링하기 직전에 IPreviewHandler::D oPreview 에서 데이터를 로드합니다.
IObjectWithSite
IObjectWithSite::SetSite
나중에 액세스할 수 있도록 IUnknown 포인터를 저장합니다.
현재 IPreviewHandlerFrame 개체에 대한 참조가 있는 경우 해제합니다. 저장된 IUnknown 포인터를 사용하여 새 IPreviewHandlerFrame 참조를 위해 사이트에서 QueryInterface를 호출합니다.
현재 액셀러레이터 테이블이 있는 경우 삭제합니다. IPreviewHandlerFrame::GetWindowContext를 호출하여 새 가속기 테이블을 가져옵니다. 이 테이블을 저장합니다. 프레임에서 지원하는 액셀러레이터 키 목록으로만 사용됩니다. 가속기 항목의 명령은 무시됩니다.
IObjectWithSite::GetSite
사이트 포인터가 무엇이든 간에 반환합니다.
IOleWindow
IOleWindow::ContextSensitiveHelp
이 메서드에 대한 E_NOTIMPL 반환합니다.
IOleWindow::GetWindow
미리 보기 처리기의 창이 현재 있는 경우 해당 창의 HWND 를 반환하고 S_OK. 창이 없으면 E_FAIL 반환합니다.
IPreviewHandler
- IPreviewHandler::SetWindow
- IPreviewHandler::SetRect
- IPreviewHandler::D oPreview
- IPreviewHandler::SetFocus
- IPreviewHandler::QueryFocus
- IPreviewHandler::TranslateAccelerator
- IPreviewHandler::Unload
IPreviewHandler::SetWindow
이 메서드의 hwnd 매개 변수를 미리 보기 처리기의 HWND 부모로 설정합니다. 이 메서드는 여러 번 호출할 수 있습니다. prc 매개 변수에 설명된 영역에서만 렌더링되도록 미리 보기의 크기를 조정합니다.
미리 보기가 렌더링 중인 경우 IPreviewHandler::SetWindow 메서드를 사용하여 미리 보기의 부모를 변경합니다. 미리 보기가 렌더링되는 영역도 변경합니다.
IPreviewHandler::SetRect
이 메서드의 prc에서 설명하는 영역에서만 렌더링되도록 미리 보기의 크기를 조정합니다.
미리 보기가 렌더링 중인 경우 미리 보기가 렌더링하는 영역을 변경합니다.
IPreviewHandler::D oPreview
이것이 바로 실제 작업이 수행되는 곳입니다. 미리 보기는 동적이므로 미리 보기 콘텐츠는 필요한 경우에만 로드해야 합니다. 초기화에서 콘텐츠를 로드하지 마세요.
미리 보기 처리기 창이 없으면 만듭니다. 미리 보기 처리기의 창은 IPreviewHandler::SetWindow에서 제공하는 창의 자식이어야 합니다. IPreviewHandler::SetWindow 및 IPreviewHandler::SetRect에서 제공하는 크기여야 합니다(가장 최근에 호출된 크기 중 하나).
창이 있으면 미리 보기 처리기가 초기화된 IStream 에서 데이터를 로드하고 해당 데이터를 미리 보기 처리기의 창으로 렌더링합니다.
IPreviewHandler::SetFocus
이 메서드는 포커스가 탭 작업을 통해 읽기 창에 들어갈 때 호출됩니다. 정방향 탭 또는 역방향 탭으로 입력할 수 있으므로 SHIFT 키의 현재 상태를 사용하여 읽기 창의 첫 번째 또는 마지막 탭 정지가 포커스를 받을지 여부를 결정합니다.
IPreviewHandler::QueryFocus
이 메서드는 GetFocus 함수를 호출하고 phwnd 매개 변수에서 해당 호출의 결과를 반환해야 합니다.
IPreviewHandler::TranslateAccelerator
이 메서드는 사용자 키 입력에 대한 응답으로 미리 보기 처리기 프로세스의 메시지 펌프(prevhost.exe 또는 사용자 지정 로컬 서버)에 의해 호출됩니다. 미리 보기 처리기는 아래에 설명된 알고리즘에 따라 이러한 키 입력을 처리하거나 호스트에 전달해야 합니다.
그러나 미리 보기는 읽기 전용이므로 키보드 입력은 최소화되어야 하며 이와 같은 최적화는 많은 경우에 필요하지 않습니다.
메시지 펌프를 통해 이 메서드에 전달된 키보드 가속기가 미리 보기 처리기가 허용하는 가속기인 경우 이를 처리하고 S_OK 반환합니다. 처리기가 해당 가속기를 수락하지 않으면 처리할 프레임까지 가속기 메시지를 다시 보낼 수 있습니다.
키보드 가속기를 프레임으로 다시 전달하기 위한 두 가지 옵션이 있습니다.
가장 간단한 모델은 IPreviewHandlerFrame::TranslateAccelerator를 사용하여 모든 키 입력을 호스트에 전달하는 것입니다. 이 작업은 Windows SDK(소프트웨어 개발 키트)와 함께 제공되는 미리 보기 처리기 샘플에서 수행됩니다. 모든 낮은 무결성 미리 보기 처리기는 이 모델을 사용해야 합니다. 미리 보기 처리기에서 가속기를 처리하지 않는 경우 IPreviewHandlerFrame::TranslateAccelerator 를 호출하고 결과를 반환합니다.
다른 모델은 프로세스 경계를 넘어 너무 많은 키 입력을 보내지 않도록 가속기 테이블을 최적화로 사용하는 것입니다.
- 미리 보기 처리기에서 IObjectWithSite::SetSite 가 호출되면 IPreviewHandlerFrame::GetWindowContext를 통해 가속기 테이블을 가져옵니다. (미리 보기가 제거되면 핸들을 액셀러레이터 테이블로 해제해야 합니다.)
- 미리 보기 처리기에서 가속기를 처리하는 경우 해당 가속기를 처리하고 S_OK 반환합니다.
- 미리 보기 처리기에서 가속기를 처리하지 않는 경우 IsAccelerator 를 사용하는 메시지를 획득한 가속기 테이블과 비교합니다.
- 액셀러레이터가 해당 가속기 테이블의 항목과 일치하는 경우 IPreviewHandlerFrame::TranslateAccelerator 를 호출하고 결과를 반환합니다.
- 액셀러레이터가 액셀러레이터 테이블의 항목과 일치하지 않으면 S_FALSE 반환합니다.
IPreviewHandler::Unload
이 메서드가 호출되면 렌더링을 중지하고, 스트림에서 데이터를 읽어 할당된 리소스를 해제하고, IStream 자체를 해제합니다.
이 메서드가 호출되면 IPreviewHandler::D oPreview 를 다시 호출하기 전에 처리기를 다시 초기화해야 합니다.
IPreviewHandlerVisuals
- IPreviewHandlerVisuals::SetBackgroundColor
- IPreviewHandlerVisuals::SetFont
- IPreviewHandlerVisuals::SetTextColor
이러한 메서드는 미리 보기 처리기가 호스트의 색 및 글꼴 구성표에 응답하도록 지시할 때 구현되어야 합니다. 호스트는 IPreviewHandlerVisuals에 대한 처리기를 쿼리합니다. 지원되는 것으로 확인되면 호스트는 색, 글꼴 및 텍스트 색을 제공합니다.
IPreviewHandlerVisuals::SetBackgroundColor
이 색을 저장하고 배경색을 제공하려는 경우 렌더링 중에 사용합니다. instance 경우 처리기가 IPreviewHandler::SetWindow 및 IPreviewHandler::SetRect에서 제공하는 영역보다 작은 영역으로 렌더링될 때 창을 채웁니다. 그러나 이러한 메서드에서 제공하는 영역 밖에 그리면 안 됩니다.
미리 보기가 이미 렌더링되는 동안 이 메서드가 호출되면 이 배경색을 사용하여 렌더링을 다시 시작해야 합니다.
IPreviewHandlerVisuals::SetFont
현재 Windows Vista 설정과 일치하는 텍스트를 표시하려는 경우 이 글꼴 정보를 저장하고 렌더링하는 동안 사용합니다.
IPreviewHandlerVisuals::SetTextColor
현재 Windows Vista 설정과 일치하는 텍스트를 표시하려는 경우 이 텍스트 색 정보를 저장하고 렌더링하는 동안 사용합니다.
관련 항목