功能表和資源:功能表合併
本文詳細說明 OLE 檔應用程式正確處理視覺編輯和就地啟用所需的步驟。 就地啟用對容器和伺服器(元件)應用程式都構成挑戰。 使用者會保留在相同的框架視窗中(在容器檔案的內容中),但實際上正在執行另一個應用程式(伺服器)。 這需要在容器和伺服器應用程式的資源之間進行協調。
本文涵蓋的主題包括:
功能表版面配置
第一個步驟是協調功能表配置。 容器應用程式應該建立新的功能表,只有在內嵌專案就地啟用時才使用。 根據列出的順序,此功能表至少應該包含下列專案:
檔案功能表與開啟檔案時所使用的檔案功能表相同。 (通常沒有其他功能表項目放在下一個專案之前。
兩個連續分隔符號。
視窗功能表與開啟檔案時所使用的視窗功能表相同(只有在 MDI 應用程式中的容器應用程式時)。 某些應用程式可能會有其他功能表,例如屬於此群組的 [選項] 功能表,這會在就地啟動內嵌專案時保留在功能表上。
注意
可能有其他功能表會影響容器檔案的檢視,例如 Zoom。 這些容器功能表會出現在此功能表資源的兩個分隔符號之間。
伺服器(元件)應用程式也應該特別建立新的功能表以進行就地啟用。 它應該就像檔案開啟時所使用的功能表,但不含功能表項目,例如操作伺服器檔的 [檔案] 和 [視窗],而不是資料。 此功能表通常包含下列各項:
編輯功能表與開啟檔案時所使用的功能表相同。
分隔符號。
物件編輯功能表,例如 Scribble 範例應用程式中的畫筆功能表。
分隔符號。
說明功能表。
例如,查看容器和伺服器的一些範例就地功能表配置。 已移除每個功能表項目的詳細資料,讓範例更加清楚。 容器的就地功能表有下列專案:
IDR_CONTAINERTYPE_CNTR_IP MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&File C1"
MENUITEM SEPARATOR
POPUP "&Zoom C2"
MENUITEM SEPARATOR
POPUP "&Options C3"
POPUP "&Window C3"
END
連續分隔符號會指出伺服器功能表的第一個部分應移至何處。 現在查看伺服器的就地功能表:
IDR_SERVERTYPE_SRVR_IP MENU PRELOAD DISCARDABLE
BEGIN
POPUP "&Edit S1"
MENUITEM SEPARATOR
POPUP "&Format S2"
MENUITEM SEPARATOR
POPUP "&Help S3"
END
這裡的分隔符號會指出容器功能表項目的第二個群組應移至何處。 從這個伺服器啟始物件時產生的功能表結構,在此容器內就地啟始物件看起來像這樣:
BEGIN
POPUP "&File C1"
POPUP "&Edit S1"
POPUP "&Zoom C2"
POPUP "&Format S2"
POPUP "&Options C3
POPUP "&Window C3"
POPUP "&Help S3"
END
如您所見,分隔符號已取代為每個應用程式功能表的不同群組。
伺服器應用程式也應該提供與就地功能表相關聯的快速鍵資料表。 容器會將它們併入自己的快速鍵資料表中。
當內嵌專案就地啟動時,架構會載入就地功能表。 然後,它會向伺服器應用程式要求其功能表進行就地啟用,並將它插入分隔符號所在的位置。 這就是功能表結合的方式。 您可以從容器取得功能表,以在檔案和視窗位置上操作,並從伺服器取得功能表以在專案上操作。
工具列和狀態列
伺服器應用程式應該建立新的工具列,並將其點陣圖儲存在個別的檔案中。 應用程式精靈產生的應用程式會將此點陣圖儲存在名為 ITOOLBAR.BMP 的檔案中。 當伺服器的專案就地啟動時,新的工具列會取代容器應用程式的工具列,而且應該包含與一般工具列相同的專案,但移除代表 [檔案] 和 [視窗] 功能表上專案的圖示。
此工具列會載入衍生 COleIPFrameWnd
類別,由應用程式精靈為您建立。 狀態列是由容器應用程式處理。 如需就地框架視窗實作的詳細資訊,請參閱 伺服器:實作伺服器 。