功能表和資源: 功能表合併

這份文件詳細說明控制視覺編輯和就地啟動適當的 OLE 文件應用程式的必要步驟。就地啟動帶給容器和伺服器的一項挑戰 (元件) 的應用程式。使用者會保留在同一個框架視窗 (在容器文件的內容),但實際上正在執行另一個應用程式 (伺服器)。這需要資源的容器和伺服應用程式間的協調。

本文所涵蓋的主題包括:

  • 功能表配置

  • 工具列和狀態列

功能表配置

第一步是協調功能表的配置。如需詳細資訊,請參閱功能表建立一節中功能表程式設計考量在Windows SDK。

容器應用程式應該建立新的功能表,以內嵌的項目就地啟動時,才使用。最起碼,此功能表應該包含下列命令,列出的順序:

  1. 檔案開啟時所用相同的檔案] 功能表。(通常是其他功能表項目會放在下一個項目之前)。

  2. 兩個連續的分隔符號。

  3. 檔案開啟時所用相同的視窗] 功能表 (只有當容器應用程式在 MDI 應用程式中的)。某些應用程式可能有其他功能表,例如 [選項] 功能表中,屬於此群組,而不用在功能表上,當內嵌項目就地啟動。

    注意事項注意事項

    可能有其他會影響到容器文件,例如 [縮放檢視的功能表。這些容器功能表會出現在這個功能表資源中的二個分隔符號之間。

伺服器 (元件) 應用程式也應該建立一個新的功能表,特別為就地啟動。它應該是像檔案開啟時所使用的功能表,但不使用功能表項目,例如檔案和管理伺服器文件,而非資料的視窗。一般而言,此功能表包含下列任一動作:

  1. 編輯] 功能表來開啟檔案時所使用的那一個完全相同。

  2. 分隔字元。

  3. 物件編輯功能表,例如在 Scribble 範例應用程式中的 [畫筆] 功能表。

  4. 分隔字元。

  5. [說明] 功能表。

如需範例,請查看的容器和伺服的某些範例就地功能表配置。若要讓範例更清楚地查看已移除的每個功能表項目詳細資料。容器的就地功能表包含下列項目:

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-衍生的類別,為您建立應用程式精靈。[狀態] 列是由容器應用程式處理的。如需有關實作就地框架視窗的詳細資訊,請參閱伺服器: 實作一個伺服程式

請參閱

概念

功能表和資源 (OLE)

啟動 (C++)

伺服器

容器