ActiveX コントロールは、さまざまな OLE 機能をサポートし、多くのソフトウェアニーズに合わせてカスタマイズできる、コンポーネント オブジェクト モデル (COM) に基づく再利用可能なソフトウェア コンポーネントです。
Von Bedeutung
ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 詳細については、「ActiveX コントロール」を参照してください。
ActiveX コントロールは、通常の ActiveX コントロール コンテナーとインターネット (World Wide Web ページ) の両方で使用するように設計されています。 ActiveX コントロールは、MFC を使用するか、ここで説明するか、 Active Template Library (ATL) を使用して作成できます。
ActiveX コントロールは、独自のウィンドウに描画し、イベント (マウス クリックなど) に応答し、Automation オブジェクトと同様のプロパティとメソッドを含むインターフェイスを介して管理できます。
これらのコントロールは、データベース アクセス、データ監視、グラフ作成など、多くの用途で開発できます。 ActiveX コントロールは、移植性に加えて、既存の OLE コンテナーとの互換性や、メニューを OLE コンテナー メニューと統合する機能など、ActiveX コントロールでは以前は使用できなかった機能をサポートしています。 さらに、ActiveX コントロールはオートメーションを完全にサポートしています。これにより、コントロールは読み取り/書き込みプロパティと、コントロール ユーザーが呼び出すことができる一連のメソッドを公開できます。
ウィンドウがアクティブになったときにのみウィンドウを作成する、ウィンドウなしの ActiveX コントロールとコントロールを作成できます。 ウィンドウレス コントロールを使用すると、アプリケーションの表示が高速化され、透明なコントロールと非透明なコントロールを使用できるようになります。 ActiveX コントロールのプロパティを非同期的に読み込むこともできます。
ActiveX コントロールは、任意の OLE コンテナーで使用できるインプロセス サーバー (通常は小さなオブジェクト) として実装されます。 ActiveX コントロールの完全な機能は、ActiveX コントロールを認識するように設計された OLE コンテナー内でのみ使用できます。 ActiveX コントロールをサポートするコンテナーの一覧については、「ActiveX コントロールを他のアプリケーションに移植する」を参照してください。 このコンテナーの種類は、次に "コントロール コンテナー" と呼ばれ、コントロールのプロパティとメソッドを使用して ActiveX コントロールを操作でき、イベントの形式で ActiveX コントロールから通知を受け取ります。 次の図は、この相互作用を示しています。
ActiveX コントロール コンテナーとウィンドウ化された ActiveX コントロールの間の相互作用
ActiveX コントロールの最適化に関する最近の情報については、「 MFC ActiveX コントロール: 最適化」を参照してください。
MFC ActiveX コントロールを作成するには、「 ActiveX コントロール プロジェクトを作成する」を参照してください。
詳細については、以下を参照してください。
ActiveX コントロールの基本コンポーネント
ActiveX コントロールでは、複数のプログラム要素を使用して、コントロール コンテナーやユーザーと効率的に対話します。 これらは、 クラス COleControl、一連のイベント発生関数、およびディスパッチ マップです。
開発するすべての ActiveX コントロール オブジェクトは、MFC 基本クラスの COleControl
から強力な機能セットを継承します。 これらの機能には、インプレース アクティブ化と Automation ロジックが含まれます。
COleControl
は、MFC ウィンドウ オブジェクトと同じ機能に加えて、イベントを発生させる機能をコントロール オブジェクトに提供できます。
COleControl
また、ウィンドウが提供する機能の一部 (マウス キャプチャ、キーボード フォーカス、スクロール) のヘルプをコンテナーに依存するウィンドウ レス コントロールも提供できますが、表示速度は大幅に向上します。
コントロール クラスは COleControl
から派生するため、特定の条件が満たされたときに、イベントと呼ばれるメッセージをコントロール コンテナーに送信する機能 ("fire" ) を継承します。 これらのイベントは、コントロールで重要なことが発生したときにコントロール コンテナーに通知するために使用されます。 イベントにパラメーターをアタッチすることで、イベントに関する追加情報をコントロール コンテナーに送信できます。 ActiveX コントロール イベントの詳細については、「 MFC ActiveX コントロール: イベント」を参照してください。
最後の要素はディスパッチ マップであり、一連の関数 (メソッドと呼ばれる) と属性 (プロパティと呼ばれます) をコントロール ユーザーに公開するために使用されます。 プロパティを使用すると、コントロール コンテナーまたはコントロール ユーザーがさまざまな方法でコントロールを操作できます。 ユーザーは、コントロールの外観の変更、コントロールの特定の値の変更、コントロールが保持する特定のデータへのアクセスなど、コントロールの要求を行うことができます。 このインターフェイスはコントロール開発者によって決定され、 クラス ビューを使用して定義されます。 ActiveX コントロールのメソッドとプロパティの詳細については、「 MFC ActiveX コントロール: メソッド と プロパティ」を参照してください。
Windows と ActiveX コントロール コンテナーを使用したコントロール間の相互作用
コントロール コンテナー内でコントロールを使用すると、2 つのメカニズムを使用して通信します。これはプロパティとメソッドを公開し、イベントを発生させます。 次の図は、これら 2 つのメカニズムの実装方法を示しています。
ActiveX コントロール コンテナーと ActiveX コントロール間の通信
前の図は、他の OLE インターフェイス (オートメーションやイベント以外) がコントロールによってどのように処理されるかも示しています。
コンテナーとのコントロールの通信はすべて、 COleControl
によって実行されます。 コンテナーの要求の一部を処理するために、 COleControl
はコントロール クラスに実装されているメンバー関数を呼び出します。 すべてのメソッドと一部のプロパティは、この方法で処理されます。 コントロールのクラスは、 COleControl
のメンバー関数を呼び出すことによって、コンテナーとの通信を開始することもできます。 この方法でイベントが発生します。
ActiveX コントロールのアクティブな状態と非アクティブな状態
コントロールには、アクティブと非アクティブの 2 つの基本的な状態があります。 従来、これらの状態は、コントロールにウィンドウがあるかどうかによって区別されていました。 アクティブなコントロールにはウィンドウがありました。非アクティブなコントロールがありませんでした。 ウィンドウなしのアクティブ化の導入により、この区別はユニバーサルではなくなりましたが、多くのコントロールに適用されます。
ウィンドウレス コントロールがアクティブになると、コンテナーからマウス キャプチャ、キーボード フォーカス、スクロール、その他のウィンドウ サービスが呼び出されます。 また、非アクティブなコントロールにマウス操作を提供したり、アクティブ化されてウィンドウが作成されるまで待機するコントロールを作成したりすることもできます。
ウィンドウを持つコントロールがアクティブになると、コントロール コンテナー、ユーザー、および Windows と完全に対話できます。 次の図は、ActiveX コントロール、コントロール コンテナー、およびオペレーティング システム間の通信パスを示しています。
ウィンドウ化された ActiveX コントロールでの Windows メッセージ処理 (アクティブな場合)
シリアル化
永続化とも呼ばれるデータをシリアル化する機能により、コントロールはプロパティの値を永続ストレージに書き込みます。 その後、ストレージからオブジェクトの状態を読み取ることで、コントロールを再作成できます。
コントロールは、ストレージ メディアへのアクセスを取得する責任を負いません。 代わりに、コントロールのコンテナーは、適切な時間に使用するストレージ メディアをコントロールに提供する役割を担います。 シリアル化の詳細については、「 MFC ActiveX コントロール: シリアル化」を参照してください。 シリアル化の最適化については、「ActiveX コントロールでの 永続化と初期化の最適化 : 最適化」を参照してください。
ActiveX コントロール クラスとツールのインストール
Visual C++ をインストールすると、セットアップで ActiveX コントロールが選択されている場合 (既定で選択されている) 場合、MFC ActiveX コントロール クラスとリテールおよびデバッグ ActiveX コントロールのランタイム DLL が自動的にインストールされます。
既定では、ActiveX コントロール のクラスとツールは、\Program Files\Microsoft Visual Studio .NET の下の次のサブディレクトリにインストールされます。
\Common7\Tools
テスト コンテナー ファイル (TstCon32.exeとそのヘルプ ファイル) が含まれています。
\Vc7\atlmfc\include
MFC を使用して ActiveX コントロールを開発するために必要なインクルード ファイルが含まれています
\Vc7\atlmfc\src\mfc
MFC の特定の ActiveX コントロール クラスのソース コードが含まれています
\Vc7\atlmfc\lib
MFC を使用して ActiveX コントロールを開発するために必要なライブラリが含まれています
MFC ActiveX コントロールのサンプルもあります。 これらのサンプルの詳細については、「コントロールのサンプル: MFC-Based ActiveX コントロール」を参照してください。