建置預覽處理常式
本主題討論建立預覽處理常式所需的特定介面和方法。
預覽處理常式必須實作下列介面:
- IInitializeWithStream::Initialize (強式慣用) 、 IInitializeWithFile或 IInitializeWithItem
- IObjectWithSite
- IOleWindow
- IPreviewHandler
如果您的預覽處理常式支援主機提供的視覺設定,例如背景色彩和字型,它也必須實作下列介面:
本主題假設預覽處理常式是使用資料流程初始化,並已註冊特定副檔名。
IInitializeWithStream::Initialize
儲存 IStream 和模式參數,以便在準備好預覽專案時讀取專案的資料。 請勿在 Initialize中載入資料。 在轉譯之前,在 IPreviewHandler::D oPreview 中載入資料。
IObjectWithSite
IObjectWithSite::SetSite
儲存 IUnknown 指標以供稍後存取。
如果您目前有 IPreviewHandlerFrame 物件的參考,請釋放它。 使用預存 的 IUnknown 指標,在月臺上呼叫 QueryInterface 以取得新的 IPreviewHandlerFrame 參考。
如果您目前有快速鍵資料表,請終結它。 呼叫 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的父系。 這個方法可以多次呼叫。 調整預覽大小,使其只呈現于 中國 參數所描述的區域。
如果預覽程式正在進行轉譯,請使用 IPreviewHandler::SetWindow 方法來變更預覽程式的父代。 同時變更預覽程式正在轉譯的區域。
IPreviewHandler::SetRect
調整預覽大小,使其只會在此方法 的中國所描述的區域呈現。
如果預覽程式正在進行轉譯,請變更預覽程式轉譯的區域。
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
當您想要提供背景色彩時,請儲存此色彩,並在轉譯期間使用它。 例如,當處理常式轉譯為小於 IPreviewHandler::SetWindow 和 IPreviewHandler::SetRect所提供的區域時,若要填滿視窗。 不過請注意,您不應該在那些方法所提供的區域之外繪製。
如果在預覽已經轉譯時呼叫這個方法,則應該使用此背景色彩重新開機轉譯。
IPreviewHandlerVisuals::SetFont
儲存此字型資訊,並在轉譯期間使用它,當您想要顯示與目前 Windows Vista 設定一致的文字時。
IPreviewHandlerVisuals::SetTextColor
儲存此文字色彩資訊,並在轉譯期間使用它,當您想要顯示與目前 Windows Vista 設定一致的文字時。
相關主題