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

この記事では、埋め込み ActiveX コントロールの公開されているメソッドプロパティにアクセスするプロセスについて説明します。

重要

ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に取って代わる最新のテクノロジの詳細については、「ActiveX コントロール」を参照してください。

基本的には、これらの手順に従います。

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

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

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

この説明では、ActiveX コントロールをサポートするダイアログベースのプロジェクト (名前は Container) を作成していることを前提としています。 Circ サンプル コントロール (Circ) を作成したプロジェクトに追加します。

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

プロシージャ

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

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

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

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

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

  5. ツールボックスの [Circ control] (Circ コントロール) アイコンをクリックします。

  6. ダイアログ ボックス内の場所をクリックして、Circ コントロールを挿入します。

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

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

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

#include "circ.h"

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

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

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

[メンバー変数の追加] ダイアログ ボックスによって 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;
};

さらに、CContainerDlgDoDataExchange の実装に 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 コントロール コンテナー