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 コントロールが動的に作成されます。