伺服程式: 實作就地框架視窗
本文將告訴您需要的視覺化編輯伺服應用程式中實作就地框架視窗,如果您不使用應用程式精靈建立伺服器應用程式。代替遵循本文所描述的程序,您可以使用現有的就地框架視窗類別從應用程式精靈產生應用程式或所提供的 Visual C++ 範例。
若要宣告一個就地框架視窗類別
衍生一個就地框架視窗類別從COleIPFrameWnd。
使用DECLARE_DYNCREATE巨集儲存在您的類別標頭檔。
使用IMPLEMENT_DYNCREATE類別實作 (.cpp) 檔中的巨集。這可讓架構建立這個類別的物件。
宣告COleResizeBar框架視窗類別中的成員。如果您想要支援在伺服器應用程式的就地調整大小,就需要這項目。
宣告OnCreate訊息處理常式 (使用屬性視窗),然後呼叫建立為您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的文件樣板物件,以指定的資源和就地框架視窗,以供開啟和就地編輯的函式。
一系列的函式呼叫中如果陳述式會建立工具列資源從提供的伺服器。在這個時候,工具列是容器的視窗階層架構的一部分。因為這工具列衍生自CToolBar,它將其郵件傳遞至其擁有者,容器應用程式的框架視窗中,除非您變更擁有者。這就是為什麼在呼叫SetOwner是必要的。這個呼叫會變更 [指令傳送到伺服器的就地框架視窗,讓訊息傳送到伺服器的位置] 視窗。這可以讓伺服程式反應到它所提供的工具列作業。
工具列點陣圖的 ID 應該與您的伺服器應用程式中所定義的其他就地資源相同。請參閱功能表和資源: 伺服加入如需詳細資訊。
如需詳細資訊,請參閱 COleIPFrameWnd, COleResizeBar,以及 CDocTemplate::SetServerInfo 在類別庫參考。