サーバー : 埋め込み先フレーム ウィンドウの実装
この記事では、アプリケーション ウィザードを使用せずにサーバー アプリケーションを作成する場合に、埋め込み先フレーム ウィンドウを、ビジュアル編集サーバー アプリケーション内に実装する際に行う必要がある作業について説明します。 この記事で説明する手順の代わりに、既存の埋め込み先フレーム ウィンドウ クラスを、アプリケーション ウィザードで生成されたアプリケーションまたは Visual C++ で提供されているサンプルから使用することもできます。
埋め込み先フレーム ウィンドウ クラスを宣言するには
COleIPFrameWndの埋め込み先フレーム ウィンドウ クラスを派生させます。ご自身のクラス ヘッダー ファイル内で、DECLARE_DYNCREATE マクロを使用します。
ご自身のクラス実装ファイル内で、IMPLEMENT_DYNCREATE マクロ (.cpp) を使用します。 これにより、このクラスのオブジェクトをフレームワークで作成できます。
フレーム ウィンドウ クラス内で
COleResizeBarメンバーを宣言します。 これは、サーバー アプリケーション内で埋め込み先サイズ変更をサポートする場合に必要です。OnCreateメッセージ ハンドラーを宣言し (クラス ウィザードを使用)、ご自身のCOleResizeBarメンバーに対してCreateを呼び出します (これを定義した場合)。ツール バーがある場合は、フレーム ウィンドウ クラス内で
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 の各クラスに関するページをご覧ください。