伺服器:實作就地編輯框架視窗
本文說明如果不使用應用程式精靈來建立您的伺服器應用程式,則必須實作自己的視覺化編輯伺服器應用程式的就地框架視窗。 為了取代本文所述的程式,您可以從應用程式精靈產生的應用程式或 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
的呼叫是必要的。 此呼叫會將傳送命令的視窗變更為伺服器的就地框架視窗,使訊息傳遞至伺服器。 如此可讓伺服器回應所提供之工具列的作業。
工具列點陣圖的 ID 應該與在您的伺服器應用程式中所定義的其他就地資源相同。 如需詳細資訊, 請參閱 功能表和資源:伺服器新增。
如需詳細資訊,請參閱 類別庫參考 中的 COleIPFrameWnd 、 COleResizeBar 和 CDocTemplate::SetServerInfo 。