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

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

    #include "circ.h"
    
  2. CMYVIEW.H にある CMyView クラス定義のプロテクト セクションに、CCirc 型のメンバ関数を追加します。

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

  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 コントロール コンテナ