Share via


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 コントロールを動的に作成するには

  1. CMyView クラス定義の直前に、CMYVIEW.H に CIRC.H を挿入します:

    #include "circ.h"
    
  2. CMYVIEW.H にある CMyView クラス定義の保護されたセクションに、メンバー変数 (型 CCirc) を追加します:

    class CMyView : public CView
    {
    
    protected:
    CCirc m_myCtl;
    
    public:
    afx_msg void OnViewCircdlg();
    }
    ;
    
  3. WM_CREATE メッセージハンドラーをクラス CMyView に追加します。

  4. ハンドラー関数 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;
    }
    
  5. プロジェクトをリビルドします。 アプリケーションのビューが作成されるたびに、Circ コントロールが動的に作成されます。

関連項目

ActiveX コントロール コンテナー