MFC ActiveX コントロール
更新 : 2007 年 11 月
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 コントロール : メソッド」および「MFC ActiveX コントロール : プロパティ」を参照してください。
ウィンドウ付きコントロールと ActiveX コントロール コンテナ間の対話
コントロールがコントロール コンテナ内で使用される場合、コントロールは、プロパティおよびメソッドの公開とイベントの発生という 2 つの機構を使ってコンテナと通信します。次の図は、この 2 つの機構を実装する方法を示しています。
ActiveX コントロール コンテナと ActiveX コントロールとの通信
上の図には、オートメーションとイベント以外の OLE インターフェイスがどのように処理されるかも示されています。
コントロールとコンテナとの通信は、すべて COleControl によって行われます。一部のコンテナからの要求を処理するときに、コントロールのクラスに実装されたメンバ関数が COleControl によって呼び出されます。すべてのメソッドと一部のプロパティはこの方法で処理されます。また、コントロールのクラスでは、COleControl のメンバ関数を呼び出すことによってコンテナとの通信を開始することもできます。イベントはこの方法で送られます。
ActiveX コントロールのアクティブな状態とアクティブでない状態
コントロールには、アクティブな状態とアクティブでない状態の 2 つの基本的な状態があります。この 2 つの状態は、従来はコントロールにウィンドウがあるかどうかによって区別されていました。つまり、アクティブなコントロールにはウィンドウがあり、アクティブでないコントロールにはウィンドウがないというように区別できました。この区別は、ウィンドウなしのアクティベーションが導入されたことによって無条件に適用することはできなくなりましたが、今でも多くのコントロールに対して有効です。
ウィンドウなしのコントロールがアクティブになると、マウスのキャプチャ、キーボード フォーカス、スクロールなどのウィンドウ サービスがコンテナから呼び出されます。このほか、アクティブでないコントロールとマウスとの対話を提供したり、アクティブになってからウィンドウを作成するコントロールを作成できます。
ウィンドウを持つコントロールがアクティブになると、コントロール コンテナ、ユーザー、および Windows との対話が可能になります。ActiveX コントロール、コントロール コンテナ、オペレーティング システム間の通信経路は、次の図のようになります。
ウィンドウを持つ ActiveX コントロールがアクティブになったときの Windows メッセージの処理
シリアル化
コントロールは、データをシリアル化 (永続化とも呼ばれる) することによって、プロパティの値を 2 次記憶に書き込むことができます。コントロールを再作成するには、2 次記憶からオブジェクトの状態を読み取ります。
ストレージ メディアにアクセスするのは、コントロールではありません。コントロールが使用するストレージ メディアは、コントロールのコンテナが必要に応じて用意します。シリアル化の詳細については、「MFC ActiveX コントロール : シリアル化」を参照してください。シリアル化の最適化については、「MFC 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 コントロールのサンプルもあります。サンプルの詳細については、「コントロール サンプル」を参照してください。