ActiveX コントロール コンテナー : ダイアログ ベースではないコンテナーでのコントロールの使用
SDI アプリケーションや MDI アプリケーションなどの一部のアプリケーションでは、アプリケーションのウィンドウにコントロールを埋め込む必要があります。 Visual C++ によって挿入されたラッパークラスの Create メンバー関数を使用すると、ダイアログ ボックスを必要とせずに、コントロールのインスタンスを動的に作成できます。
Create メンバー関数には、次のパラメーターがあります:
lpszWindowName
コントロールのテキストまたはキャプション プロパティ (存在する場合) に表示されるテキストへのポインター。
dwStyle
Windows スタイル。 完全な一覧については、「CWnd:: CreateControl」を参照してください。
rect
コントロールのサイズと位置を指定します。
pParentWnd
コントロールの親ウィンドウ (通常は CDialog
) を指定します。 NULL は指定できません。
nID
コントロール ID を指定します。これは、コントロールを参照するためにコンテナーによって使用されます。
この関数を使用して ActiveX コントロールを動的に作成する例の 1 つに、SDI アプリケーションのフォームビューがあります。 その後、アプリケーションの WM_CREATE
ハンドラーにコントロールのインスタンスを作成できます。
この例では、CMyView
はメイン ビューク ラスであり、CCirc
はラッパークラスであり、CIRC.H はラッパー クラスのヘッダー (.H) ファイルです。
この機能を実装するプロセスは、4 つの手順からなります。
非ダイアログ ウィンドウで ActiveX コントロールを動的に作成するには
CMyView
クラス定義の直前に、CMYVIEW.H に CIRC.H を挿入します:#include "circ.h"
CMYVIEW.H にある
CMyView
クラス定義の保護されたセクションに、メンバー変数 (型CCirc
) を追加します:class CMyView : public CView {
protected: CCirc m_myCtl; public: afx_msg void OnViewCircdlg(); } ;
WM_CREATE
メッセージハンドラーをクラスCMyView
に追加します。ハンドラー関数
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 コントロールが動的に作成されます。