次の方法で共有


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

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