ActiveX コントロール コンテナー : ActiveX コントロール コンテナーでの ActiveX コントロールのプログラミング
ここでは、埋め込んだ ActiveX コントロールの公開メソッドおよび公開プロパティにアクセスする方法について説明します。 基本的な手順は次のとおりです。
ギャラリを使用して、ActiveX コントロールを ActiveX コンテナー プロジェクトに追加します。
ActiveX コントロールのラッパー クラスと同じ型のメンバー変数を定義します。または、ほかの形式のアクセス手段を定義します。
ラッパー クラスの定義済みメンバー関数を使用して、ActiveX コントロールをプログラミングします。
ここでは、ActiveX コントロール サポートを有効にしてダイアログ ベースのプロジェクト (Container) を作成したものと仮定します。 このプロジェクトに Circ というコントロールを追加します。
Circ コントロールをプロジェクトに追加し (手順 1)、Circ コントロールのインスタンスをアプリケーションのメイン ダイアログ ボックスに追加します。
手順
ダイアログ テンプレートに Circ コントロールを追加するには
ActiveX コントロール コンテナー プロジェクトを読み込みます。 この例では Container プロジェクトを読み込みます。
[リソース ビュー] タブをクリックします。
[Dialog] フォルダーを開きます。
メイン ダイアログ ボックス テンプレートをダブルクリックします。 この例では IDD_CONTAINER_DIALOG をダブルクリックします。
ツールボックスで、Circ コントロールのアイコンをクリックします。
ダイアログ ボックス内の適切な場所をクリックし、Circ コントロールを追加します。
[ファイル] メニューの [すべてを保存] をクリックして、すべての変更内容をダイアログ ボックス テンプレートに保存します。
プロジェクトに対する変更
コンテナー アプリケーションから 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
}