次の方法で共有


ActiveX コントロール コンテナ : ActiveX コントロール コンテナでの ActiveX コントロールのプログラミング

更新 : 2007 年 11 月

ここでは、埋め込んだ ActiveX コントロールの公開メソッドおよび公開プロパティにアクセスする方法について説明します。基本的な手順は次のとおりです。

  1. ギャラリを使用して、ActiveX コントロールを ActiveX コンテナ プロジェクトに追加します

  2. ActiveX コントロールのラッパー クラスと同じ型のメンバ変数を定義します。または、ほかの形式のアクセス手段を定義します。

  3. ラッパー クラスの定義済みメンバ関数を使用して、ActiveX コントロールをプログラミングします。

ここでは、ActiveX コントロール サポートを有効にしてダイアログ ベースのプロジェクト (Container) を作成したものと仮定します。このプロジェクトに Circ というコントロールを追加します。

Circ コントロールをプロジェクトに追加し (手順 1)、Circ コントロールのインスタンスをアプリケーションのメイン ダイアログ ボックスに追加します。

プロシージャ

ダイアログ テンプレートに Circ コントロールを追加するには

  1. ActiveX コントロール コンテナ プロジェクトを読み込みます。この例では Container プロジェクトを読み込みます。

  2. [リソース ビュー] タブをクリックします。

  3. [Dialog] フォルダを開きます。

  4. メイン ダイアログ ボックス テンプレートをダブルクリックします。この例では IDD_CONTAINER_DIALOG をダブルクリックします。

  5. ツールボックスで、Circ コントロールのアイコンをクリックします。

  6. ダイアログ ボックス内の適切な場所をクリックし、Circ コントロールを追加します。

  7. [ファイル] メニューの [すべてを保存] をクリックして、すべての変更内容をダイアログ ボックス テンプレートに保存します。

プロジェクトに対する変更

コンテナ アプリケーションから Circ コントロールにアクセスできるようにするため、Visual C++ は、ラッパー クラス (CCirc) の実装ファイル (.CPP) を Container プロジェクトに、ラッパー クラスのヘッダー ファイル (.H) をダイアログ ボックスのヘッダー ファイルに、それぞれ自動的に追加します。

#include "circ.h"

ラッパー クラスのヘッダー ファイル (.H)

Circ コントロールのプロパティを取得および設定し、メソッドを呼び出すため、ラッパー クラス CCirc は、公開されているすべてのメソッドとプロパティの宣言を提供します。これらの宣言は CIRC.H に収められています。次の例は CCirc クラスの一部分で、ActiveX コントロールの公開インターフェイスを定義しています。

class CCirc : public CWnd
{


...


// Functions
//

   void AboutBox()
   {
      InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
   }

// Properties
//

   unsigned long GetBackColor()
   {
      unsigned long result;
      GetProperty(DISPID_BACKCOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetBackColor(unsigned long propVal)
   {
      SetProperty(DISPID_BACKCOLOR, VT_UI4, propVal);
   }
   signed char GetCircleShape()
   {
      signed char result;
      GetProperty(0x1, VT_I1, (void*)&result);
      return result;
   }
   void SetCircleShape(signed char propVal)
   {
      SetProperty(0x1, VT_I1, propVal);
   }
   short GetCircleOffset()
   {
      short result;
      GetProperty(0x3, VT_I2, (void*)&result);
      return result;
   }
   void SetCircleOffset(short propVal)
   {
      SetProperty(0x3, VT_I2, propVal);
   }
   CString GetCaption()
   {
      CString result;
      GetProperty(DISPID_CAPTION, VT_BSTR, (void*)&result);
      return result;
   }
   void SetCaption(CString propVal)
   {
      SetProperty(DISPID_CAPTION, VT_BSTR, propVal);
   }
   COleFont GetFont()
   {
      LPDISPATCH result;
      GetProperty(DISPID_FONT, VT_DISPATCH, (void*)&result);
      return COleFont(result);
   }
   void SetFont(LPDISPATCH propVal)
   {
      SetProperty(DISPID_FONT, VT_DISPATCH, propVal);
   }
   unsigned long GetForeColor()
   {
      unsigned long result;
      GetProperty(DISPID_FORECOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetForeColor(unsigned long propVal)
   {
      SetProperty(DISPID_FORECOLOR, VT_UI4, propVal);
   }
   CString GetNote()
   {
      CString result;
      GetProperty(0x4, VT_BSTR, (void*)&result);
      return result;
   }
   void SetNote(CString propVal)
   {
      SetProperty(0x4, VT_BSTR, propVal);
   }
   unsigned long GetFlashColor()
   {
      unsigned long result;
      GetProperty(0x2, VT_UI4, (void*)&result);
      return result;
   }
   void SetFlashColor(unsigned long propVal)
   {
      SetProperty(0x2, VT_UI4, propVal);
   }
};

これらの関数は、通常の C++ 構文を使用して、アプリケーションのほかのプロシージャから呼び出せるようになります。このメンバ関数セットを使用してコントロールのメソッドとプロパティにアクセスする方法については、「ActiveX コントロールのプログラミング」を参照してください。

メンバ変数によるプロジェクトの変更

ActiveX コントロールをプロジェクトに追加し、ダイアログ ボックス コンテナに埋め込むと、プロジェクトのほかの部分からその ActiveX コントロールにアクセスできます。コントロールにアクセスする最も簡単な方法は、ダイアログ クラス CContainerDlg のメンバ変数を作成することです (手順 2)。このメンバ変数は、Visual C++ でプロジェクトに追加したラッパー クラスと同じ型にします。このメンバ変数を使用すると、埋め込まれたコントロールにいつでもアクセスできます。

[メンバ変数の追加] ダイアログ ボックスでプロジェクトにメンバ変数 m_circctl を追加すると、CContainerDlg クラスのヘッダー ファイル (.H) に次の行が追加されます。

class CContainerDlg : public CDialog
{
   DECLARE_DYNAMIC(CContainerDlg)

public:
   CContainerDlg(CWnd* pParent = NULL);   // standard constructor
   virtual ~CContainerDlg();

   virtual void OnFinalRelease();

// Dialog Data
   enum { IDD = IDD_CONTAINER_DIALOG };

protected:
   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

   DECLARE_MESSAGE_MAP()
   DECLARE_DISPATCH_MAP()
   DECLARE_INTERFACE_MAP()
public:
   CCirc m_circctl;


...


};

さらに、CContainerDlg の DoDataExchange の実装ファイルに DDX_Control の呼び出しも自動的に追加されます。

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

ActiveX コントロールのプログラミング

ここまでの手順で、ActiveX コントロールをダイアログ テンプレートに追加し、そのメンバ変数を作成しました。これで、一般的な C++ の構文を使用して、埋め込まれたコントロールのプロパティとメソッドにアクセスできます。

「ラッパー クラスのヘッダー ファイル (.H)」で説明したように、ラッパー クラス CCirc のヘッダー ファイル (.H) (この例では CIRC.H) には、公開プロパティの値の取得および設定に使用できるメンバ関数のリストがあります。公開メソッド用のメンバ関数のリストもあります。

通常、コントロールのプロパティは、メイン ダイアログ クラスのメンバ関数 OnInitDialog で変更します。この関数はダイアログ ボックスが表示される直前に呼び出され、ダイアログ ボックスの内容 (コントロールなど) を初期化します。

メンバ変数 m_circctl を使用して、埋め込まれたコントロール Circ の Caption プロパティと CircleShape プロパティを変更するコードの例を次に示します。

BOOL CContainerDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_circctl.SetCaption(_T("Circ 2 Control"));
   if(!m_circctl.GetCircleShape())
      m_circctl.SetCircleShape(TRUE);

   return TRUE;  // return TRUE unless you set the focus to a control
}

参照

概念

ActiveX コントロール コンテナ