この記事では、アプリケーション ウィザードを使用してサーバー アプリケーションを作成しない場合に、ビジュアル編集サーバー アプリケーションにインプレース フレーム ウィンドウを実装するために必要な操作について説明します。 この記事で説明されている手順に従う代わりに、アプリケーション ウィザードによって生成されたアプリケーションまたは Visual C++ で提供されるサンプルのいずれかから、既存のインプレース フレーム ウィンドウ クラスを使用できます。
インプレース フレーム ウィンドウ クラスを宣言するには
COleIPFrameWnd
からインプレース フレーム ウィンドウ クラスを派生させます。クラス ヘッダー ファイルで DECLARE_DYNCREATE マクロを使用します。
クラス実装 (.cpp) ファイルで IMPLEMENT_DYNCREATE マクロを使用します。 これにより、このクラスのオブジェクトをフレームワークによって作成できます。
フレーム ウィンドウ クラスで
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」を参照してください。