實作就地啟用
就地啟用可讓使用者與內嵌物件互動,而不需要離開容器檔。 當使用者啟動 物件時, 由容器應用程式的 和伺服器應用程式功能表欄中的元素組成的複合功能表欄 會取代容器的主功能表列。 因此,使用者可以使用來自這兩個應用程式的命令和功能,包括作用中對象的內容敏感性說明。 當用戶開始使用檔的某些非物件部分時,物件會停用,導致容器檔的原始功能表取代複合功能表。
這項功能原本是就地編輯的名稱。 名稱已變更,因為編輯只是使用者與執行中對象互動的一種方式。 例如,可以接聽聲音剪輯,而不是編輯。 您可以檢視影片剪輯,而不是編輯。 就地啟用特別適用於視訊剪輯的情況,因為它允許它們就地執行,而不需呼叫個別的視窗。 如果影片要與容器檔中的相鄰文字數據一起檢視,這可能非常重要。
針對容器和伺服器應用程式,實作就地啟用是絕對選擇性的。 OLE 仍然支援啟動 物件會導致伺服器應用程式開啟個別視窗的模型。 鏈接的物件一律會在個別的視窗中開啟,強調它們位於不同的檔中。
就地啟用會從 對象開始,以回應 其容器中的 IOleObject::D oVerb 呼叫。 此呼叫通常是為了回應使用者按兩下物件,或從容器應用程式的 [編輯] 選單選取命令(動詞)。
就地視窗會在內嵌物件使用中時接收鍵盤和滑鼠輸入。 當使用者從複合功能表欄選取命令時,命令和相關聯的功能表訊息會根據選取的特定下拉功能表,傳送至容器或物件應用程式。 藉由對象的尺規、工具列或框架裝飾,輸入會直接移至擁有這些視窗的內嵌物件。
例如,就地啟動的內嵌物件會保持作用中,直到容器停用它以回應使用者輸入,或物件自願放棄作用中狀態,例如視訊剪輯。 使用者可以按下容器檔內,但在物件的就地啟用視窗之外,或按下另一個物件,來停用物件。 不過,如果使用者按兩下容器的標題列、滾動條,或特別是功能表欄,就地啟動的物件會保持作用中。
您可以將就地啟用物件伺服器實作為同行程伺服器 (DLL) 或本地伺服器 (EXE)。 在這兩種情況下,複合功能表欄包含伺服器和容器處理程式中的專案(通常是下拉功能表)。 在進程內伺服器的情況下,就地啟用視窗只是容器視窗階層中的另一個子視窗,會透過容器應用程式的訊息幫浦接收其輸入。
在本機伺服器的情況下,就地啟用視窗屬於內嵌物件的伺服器應用程式進程,但其父視窗屬於容器。 就地啟用視窗的輸入會出現在伺服器的消息佇列中,並由伺服器的訊息迴圈分派。 OLE 連結庫負責查看功能表命令和訊息是否正確分派。
相關主題