共用方式為


伺服器:實作就地編輯框架視窗

本文說明如果不使用應用程式精靈來建立您的伺服器應用程式,則必須實作自己的視覺化編輯伺服器應用程式的就地框架視窗。 為了取代本文所述的程式,您可以從應用程式精靈產生的應用程式或 Visual C++ 提供的範例,使用現有的就地框架視窗類別。

宣告就地框架視窗類別

  1. COleIPFrameWnd 衍生就地框架視窗類別。

    • 在類別標頭檔中使用 DECLARE_DYNCREATE 宏。

    • 在您的類別實作 (.cpp) 檔案中使用 IMPLEMENT_DYNCREATE 宏。 如此可讓架構建立此類別物件。

  2. 宣告框架視窗類別中的 COleResizeBar 成員。 如果您要支援在伺服器應用程式中就地調整大小,就必須如此。

    OnCreate如果您已定義訊息處理常式,請宣告訊息處理常式(使用 類別精靈 ),並 Create 呼叫您的 COleResizeBar 成員。

  3. 如果您有工具列,請在框架視窗類別中宣告 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 之後關於此程式碼的討論。

  4. 這包括主要 .cpp 檔案中的就地框架視窗類別標頭檔。

  5. 在您的應用程式類別的 InitInstance 中,呼叫文件樣板物件的 SetServerInfo 函式以指定用來開啟和就地編輯的資源與就地框架視窗。

語句中的 if 一系列函式呼叫會從伺服器所提供的資源建立工具列。 此時,工具列是容器的視窗階層架構的一部分。 由於這個工具列是衍生自 CToolBar,除非您變更擁有者,否則會將其訊息傳遞給至擁有者、容器應用程式的框架視窗。 因此對 SetOwner 的呼叫是必要的。 此呼叫會將傳送命令的視窗變更為伺服器的就地框架視窗,使訊息傳遞至伺服器。 如此可讓伺服器回應所提供之工具列的作業。

工具列點陣圖的 ID 應該與在您的伺服器應用程式中所定義的其他就地資源相同。 如需詳細資訊, 請參閱 功能表和資源:伺服器新增。

如需詳細資訊,請參閱 類別庫參考 中的 COleIPFrameWnd COleResizeBar CDocTemplate::SetServerInfo

另請參閱

伺服器
伺服器:實作伺服器
伺服器:實作伺服器文件
伺服器:伺服器項目