本文說明若您不使用應用程式精靈來建立伺服器應用程式,必須在您的視覺編輯伺服程式中實作原地框架視窗。 取代本文所述程序,您可以使用應用程式精靈產生的應用程式或 Visual C++ 提供的範例中現有的就地框架窗口類別。
宣告內嵌框架窗口類別
從
COleIPFrameWnd衍生出內嵌框架窗口類別。在類別頭檔案中使用 DECLARE_DYNCREATE 巨集。
在您的類別實作 (.cpp) 檔案中使用 IMPLEMENT_DYNCREATE 宏。 這可讓架構建立此類別的物件。
在框架視窗類別中宣告
COleResizeBar成員。 如果您想要在伺服器應用程式中支援即時調整大小,則需要這個功能。OnCreate如果您已定義訊息處理程式,請宣告訊息處理程式(使用類別精靈),並Create呼叫您的COleResizeBar成員。如果您有工具列,請在框架視窗類別中宣告
CToolBar成員。覆寫
OnCreateControlBars成員函式,以在伺服器處於在地激活狀態時建立工具列。 例如:BOOL CInPlaceFrame::OnCreateControlBars(CFrameWnd* pWndFrame, CFrameWnd* pWndDoc) { UNREFERENCED_PARAMETER(pWndDoc); // Set owner to this window, so messages are delivered to correct app m_wndToolBar.SetOwner(this); // Create toolbar on client's frame window if (!m_wndToolBar.CreateEx(pWndFrame, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_SRVR_INPLACE)) { TRACE0("Failed to create toolbar\n"); return FALSE; } // TODO: Delete these three lines if you don't want the toolbar to be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); pWndFrame->EnableDocking(CBRS_ALIGN_ANY); pWndFrame->DockControlBar(&m_wndToolBar); return TRUE; }請遵循步驟 5,參閱此程式代碼的討論。
在您的主要 .cpp 檔案中包含這個嵌入式框架視窗類別的標頭檔案。
於您的應用程式類別
InitInstance中,呼叫檔範本物件SetServerInfo的函式,以指定資源和用於開啟及就地編輯的內嵌框架視窗。
語句中的 if 一系列函式呼叫會從伺服器所提供的資源建立工具列。 此時,工具列是容器視窗階層的一部分。 由於此工具列衍生自 CToolBar,因此除非您變更擁有者,否則它會將其訊息傳遞給其擁有者、容器應用程式的框架視窗。 這就是為什麼呼叫 SetOwner 是必要的。 此呼叫會將命令傳送的視窗更改為伺服器的就地框架視窗,因此訊息會傳遞至伺服器。 這可讓伺服器回應其提供的工具列上的作業。
工具列位圖的識別碼應該與您的伺服器應用程式中定義的其他內部資源相同。 如需詳細資訊 ,請參閱功能表和資源:伺服器新增 。
如需詳細資訊,請參閱類別庫參考中的 COleIPFrameWnd、COleResizeBar 和 CDocTemplate::SetServerInfo。