サーバー : 埋め込み先フレーム ウィンドウの実装
この記事では、アプリケーション ウィザードを使用せずにサーバー アプリケーションを作成する場合に、埋め込み先フレーム ウィンドウを、ビジュアル編集サーバー アプリケーション内に実装する際に行う必要がある作業について説明します。 この記事で説明する手順の代わりに、既存の埋め込み先フレーム ウィンドウ クラスを、アプリケーション ウィザードで生成されたアプリケーションまたは 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 の各クラスに関するページをご覧ください。