次の方法で共有


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

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

Von Bedeutung

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

基本的には、次の手順に従います。

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

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

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

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

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

プロシージャ

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

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

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

  3. ダイアログ フォルダーを開きます。

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

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

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

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

プロジェクトの変更

コンテナー アプリケーションが Circ コントロールにアクセスできるようにするには、Visual C++ によってラッパー クラス (CCirc) 実装ファイル (.CPP) をコンテナー プロジェクトとラッパー クラス ヘッダー (.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;
};

さらに、 DDX_Control の呼び出しは、 CContainerDlgDoDataExchangeの実装に自動的に追加されます。

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

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

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

( ラッパー クラス ヘッダー内) に示されているように(.H) ファイル)、ヘッダー ファイル (.H) CCirc ラッパー クラスの場合、この場合は 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 コントロール コンテナー