ActiveX コントロール コンテナ : ダイアログ ベースではないコンテナでのコントロールの使用
更新 : 2007 年 11 月
SDI アプリケーションや MDI アプリケーションなどの一部のアプリケーションでは、アプリケーションのウィンドウにコントロールを埋め込むこともあります。Visual C++ で追加されるラッパー クラスのメンバ関数 Create は、ダイアログ ボックスを使用せずに、コントロールのインスタンスを動的に作成できます。
メンバ関数 Create は、次のパラメータを使用します。
lpszWindowName
コントロールの Text プロパティまたは Caption プロパティに表示するテキストへのポインタ。dwStyle
ウィンドウ スタイル。完全な一覧については、「CWnd::CreateControl」を参照してください。rect
コントロールのサイズと位置。pParentWnd
コントロールの親ウィンドウ。通常は CDialog です。NULL は指定できません。nID
コントロールの ID。コンテナがコントロールを参照するときに使用します。
この関数を使用して動的に作成する ActiveX コントロールの例として、SDI アプリケーションのフォーム ビュー内のコントロールがあります。次に、アプリケーションの WM_CREATE ハンドラでコントロールのインスタンスを作成します。
この例では、CMyView がメイン ビュー クラス、CCirc がラッパー クラス、CIRC.H がラッパー クラスのヘッダー ファイル (.H) です。
この機能は、次の 4 つの手順で実装します
ダイアログ ベースではないウィンドウに ActiveX コントロールを動的に作成するには
CMYVIEW.H の CMyView クラス定義の直前に CIRC.H を挿入します。
#include "circ.h"
CMYVIEW.H にある CMyView クラス定義のプロテクト セクションに、CCirc 型のメンバ関数を追加します。
class CMyView : public CView { ... protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); };
CMyView クラスに WM_CREATE メッセージ ハンドラを追加します。
ハンドラ関数 CMyView::OnCreate で、this ポインタを親ウィンドウとして使用し、コントロールの Create 関数を呼び出します。
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; m_myCtl.Create(NULL, WS_VISIBLE, CRect(50,50,100,100), this, 0); m_myCtl.SetCaption(_T("Control created")); return 0; }
プロジェクトを再ビルドします。アプリケーションのビューを作成するたびに、Circ コントロールが動的に作成されます。