この記事では、アプリケーション ウィザードを使用してサーバー アプリケーションを作成しない場合に、ビジュアル編集サーバー アプリケーションにインプレース フレーム ウィンドウを実装するために必要な操作について説明します。 この記事で説明されている手順に従う代わりに、アプリケーション ウィザードによって生成されたアプリケーションまたは 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」を参照してください。