ActiveX コントロール コンテナー : ダイアログ ベースではないコンテナーでのコントロールの使用
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 コントロールが動的に作成されます。