次の方法で共有


サーバー: In-Place フレーム ウィンドウの実装

この記事では、アプリケーション ウィザードを使用してサーバー アプリケーションを作成しない場合に、ビジュアル編集サーバー アプリケーションにインプレース フレーム ウィンドウを実装するために必要な操作について説明します。 この記事で説明されている手順に従う代わりに、アプリケーション ウィザードによって生成されたアプリケーションまたは Visual C++ で提供されるサンプルのいずれかから、既存のインプレース フレーム ウィンドウ クラスを使用できます。

インプレース フレーム ウィンドウ クラスを宣言するには

  1. COleIPFrameWndからインプレース フレーム ウィンドウ クラスを派生させます。

    • クラス ヘッダー ファイルで DECLARE_DYNCREATE マクロを使用します。

    • クラス実装 (.cpp) ファイルで IMPLEMENT_DYNCREATE マクロを使用します。 これにより、このクラスのオブジェクトをフレームワークによって作成できます。

  2. フレーム ウィンドウ クラスで COleResizeBar メンバーを宣言します。 これは、サーバー アプリケーションでのインプレース サイズ変更をサポートする場合に必要です。

    (クラス ウィザードを使用して) OnCreateメッセージ ハンドラーを宣言し、COleResizeBar メンバーのCreateを呼び出します (定義した場合)。

  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 は、サーバー アプリケーションで定義されている他のインプレース リソースと同じである必要があります。 詳細については、「 メニューとリソース: サーバーの追加 」を参照してください。

詳細については、「クラス ライブラリ リファレンス」の「COleIPFrameWndCOleResizeBarおよび CDocTemplate::SetServerInfo」を参照してください。

こちらも参照ください

サーバー
サーバー: サーバーの実装
サーバー: サーバー ドキュメントの実装
サーバー: サーバー項目