MFC ActiveX コントロール
ActiveX コントロールは、コンポーネント オブジェクト モデル (COM: Component Object Model) に基づく再利用可能なソフトウェア コンポーネントです。多岐にわたる OLE の機能をサポートしており、さまざまなソフトウェアの要件に合わせてカスタマイズできます。 ActiveX コントロールは、通常の ActiveX コントロール コンテナーとインターネット上の WWW (World Wide Web) ページの両方で使用できるようにデザインされています。 ActiveX コントロールを作成するときには、ここで説明するように MFC を使用することも、ATL (Active Template Library) を使用することもできます。
ActiveX コントロールを使うと、コントロールをコントロール自身のウィンドウに描画したり、マウス クリックなどのイベントに応答したりできます。また、オートメーション オブジェクトと同じようなプロパティやメソッドを持つインターフェイスを通じて管理することもできます。
ActiveX コントロールは、データベース アクセス、データの監視、グラフ作成など、さまざまな用途に合わせて開発できます。 ActiveX コントロールでは、その移植性に加えて、これまでの ActiveX コントロールにはなかった機能もサポートされるようになりました。たとえば、既存の OLE コンテナーとの互換性や、ActiveX コントロールのメニューと OLE コンテナーのメニューの統合などがサポートされています。 さらに、オートメーションが完全にサポートされているため、読み取り/書き込みのプロパティや、コントロールのユーザーによる呼び出しが可能な一連のメソッドを公開できます。
ウィンドウなしの ActiveX コントロールや、アクティブになったときにだけウィンドウを作成するコントロールも作成できます。 ウィンドウなしのコントロールを使うと、アプリケーションの表示が高速化されます。また、透過コントロールや四角形以外のコントロールを使用できるようになります。 このほか、ActiveX コントロールのプロパティを非同期で読み込むこともできます。
ActiveX コントロールは、インプロセス サーバー (通常は小さなオブジェクト) として実装され、あらゆる OLE コンテナーで使用できます。 ただし、ActiveX コントロールのすべての機能を利用するには、ActiveX コントロール対応の OLE コンテナーを使用する必要があります。 ActiveX コントロールをサポートしているコンテナーの一覧については、「ActiveX コントロールのコンテナー」を参照してください。 これ以降、ActiveX コントロールをサポートしているコンテナーを "コントロール コンテナー" と呼びます。コントロール コンテナーは、ActiveX コントロールをコントロールのプロパティとメソッドを使って操作でき、ActiveX コントロールからの通知をイベントとして受け取ります。 コントロール コンテナーと ActiveX コントロールとの対話を図に表すと、次のようになります。
ActiveX コントロール コンテナーとウィンドウを持つ ActiveX コントロールとの対話
最近いくつか ActiveX コントロールの最適化についてを参照してくださいMFC ActiveX コントロール:最適化。
MFC ActiveX コントロールの作成方法については、「MFC ActiveX コントロール ウィザード」を参照してください。
詳細については、次のトピックを参照してください。
ActiveX コントロールの基本的なコンポーネント
ActiveX コントロールは、複数のプログラム要素を使用し、コントロール コンテナーやユーザーとの対話を効率的に行います。 プログラム要素とは、COleControl クラス、一連のイベント発生関数、およびディスパッチ マップです。
開発したすべての ActiveX コントロール オブジェクトは、MFC の基本クラスである COleControl の高度な機能を継承します。 これらの機能には埋め込み先編集の有効化とオートメーション論理があります。 COleControl には、MFC ウィンドウ オブジェクトと同じ機能を持つコントロール オブジェクトを提供する他に、イベントを発生させる機能があります。 また、COleControl はウィンドウなしのコントロールも提供します。このコントロールは、ウィンドウが持つ機能の一部 (マウスのキャプチャ、キーボード フォーカス、スクロール) を支援するためにコンテナーに依存していますが、表示ははるかに高速です。
コントロール クラスは、COleControl から派生するため、特定の条件が満たされるとコントロール コンテナーにメッセージを送信する機能を継承します。このメッセージをイベントと言います。 イベントを使用すると、コントロール内で重要な動作が起こったときに、それをコントロール コンテナーに通知できます。 イベントに関する追加情報をコントロール コンテナーに送るには、イベントにパラメーターを追加します。 ActiveX コントロールのイベントの詳細情報を参照してくださいMFC ActiveX コントロール:イベント。
ActiveX コントロールが使用する最後の要素は、ディスパッチ マップです。ディスパッチ マップは、コントロールのユーザーに一連の関数 (メソッド) や属性 (プロパティ) を公開するために使用されます。 コントロール コンテナーやコントロールのユーザーは、プロパティを使って、コントロールをさまざまな方法で操作できます。 たとえば、コントロールの外観や値を変更したり、コントロールが保持している特定のデータへのアクセスなどをコントロールに要求できます。 このインターフェイスは、コントロールの開発者が決定し、クラス ビューを使って定義します。 ActiveX コントロールのメソッドおよびプロパティの詳細についてを参照してくださいMFC ActiveX コントロール:方法 と のプロパティ。
ウィンドウ付きコントロールと ActiveX コントロール コンテナー間の対話
コントロール内のコントロールのコンテナーを使用した場合、2 つのメカニズムを使用して通信します。プロパティおよびメソッドの公開し、イベントの発生します。 次の図は、この 2 つの機構を実装する方法を示しています。
ActiveX コントロール コンテナーと ActiveX コントロールとの通信
上の図には、オートメーションとイベント以外の OLE インターフェイスがどのように処理されるかも示されています。
コントロールとコンテナーとの通信は、すべて COleControl によって行われます。 一部のコンテナーからの要求を処理するときに、コントロールのクラスに実装されたメンバー関数が COleControl によって呼び出されます。 すべてのメソッドと一部のプロパティはこの方法で処理されます。 また、コントロールのクラスでは、COleControl のメンバー関数を呼び出すことによってコンテナーとの通信を開始することもできます。 イベントはこの方法で送られます。
ActiveX コントロールのアクティブな状態とアクティブでない状態
コントロールは、2 つの基本的な状態があります。アクティブと非アクティブ。 この 2 つの状態は、従来はコントロールにウィンドウがあるかどうかによって区別されていました。 つまり、アクティブなコントロールにはウィンドウがあり、アクティブでないコントロールにはウィンドウがないというように区別できました。 この区別は、ウィンドウなしのアクティベーションが導入されたことによって無条件に適用することはできなくなりましたが、今でも多くのコントロールに対して有効です。
ウィンドウなしのコントロールがアクティブになると、マウスのキャプチャ、キーボード フォーカス、スクロールなどのウィンドウ サービスがコンテナーから呼び出されます。 このほか、アクティブでないコントロールとマウスとの対話を提供したり、アクティブになってからウィンドウを作成するコントロールを作成できます。
ウィンドウを持つコントロールがアクティブになると、コントロール コンテナー、ユーザー、および Windows との対話が可能になります。 ActiveX コントロール、コントロール コンテナー、オペレーティング システム間の通信経路は、次の図のようになります。
ウィンドウを持つ ActiveX コントロールがアクティブになったときの Windows メッセージの処理
シリアル化
コントロールは、データをシリアル化 (永続化とも呼ばれる) することによって、プロパティの値を 2 次記憶に書き込むことができます。 コントロールを再作成するには、2 次記憶からオブジェクトの状態を読み取ります。
ストレージ メディアにアクセスするのは、コントロールではありません。 コントロールが使用するストレージ メディアは、コントロールのコンテナーが必要に応じて用意します。 シリアル化の詳細についてを参照してください「MFC ActiveX コントロール:シリアル化。 シリアル化の最適化の詳細については、を最適化する永続化と初期化ActiveX コントロール。最適化。
ActiveX コントロールのクラスとツールのインストール
Visual C++ をインストールするときに、セットアップ プログラムで ActiveX コントロールを選択すると (既定の設定)、MFC ActiveX コントロール クラス、およびリテール バージョンとデバッグ バージョンの ActiveX コントロール ランタイム ダイナミック リンク ライブラリ (DLL: Dynamic-Link Library) が自動的にインストールされます。
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 ベースの ActiveX コントロール