この記事では、パフォーマンスを向上させるために ActiveX コントロールを最適化するために使用できる手法について説明します。
Von Bedeutung
ActiveX は、新しい開発には使用すべきではないレガシ テクノロジです。 ActiveX に代わる最新のテクノロジの詳細については、「 ActiveX コントロール」を参照してください。
トピック「 表示時にアクティブ化」オプションをオフに し、 非アクティブな状態でマウス操作を行 う場合は、アクティブ化されるまでウィンドウを作成しないコントロールについて説明します。 「ウィンドウレス アクティブ化の提供」では、アクティブ化された場合でも、ウィンドウを作成しないコントロールについて説明します。
Windows には、OLE オブジェクトの 2 つの主な欠点があります。アクティブな場合にオブジェクトが透明または非透明になるのを防ぎ、コントロールのインスタンス化と表示に大きなオーバーヘッドを追加します。 通常、ウィンドウの作成には、コントロールの作成時間の 60% かかります。 1 つの共有ウィンドウ (通常はコンテナー) と一部のディスパッチ コードでは、コントロールは同じウィンドウ サービスを受け取ります。通常、パフォーマンスは低下しません。 ウィンドウを持つことは、オブジェクトにとってほとんど不要なオーバーヘッドです。
一部の最適化では、特定のコンテナーでコントロールを使用する場合、必ずしもパフォーマンスが向上するとは限りません。 たとえば、1996 年より前にリリースされたコンテナーはウィンドウなしのアクティブ化をサポートしていないため、この機能を実装すると、古いコンテナーでは利点が得られない。 ただし、ほぼすべてのコンテナーで永続化がサポートされているため、コントロールの永続化コードを最適化すると、任意のコンテナーでのパフォーマンスが向上する可能性があります。 コントロールが特定の種類のコンテナーで特に使用されることを意図している場合は、そのコンテナーでサポートされているこれらの最適化を調べてみます。 ただし、一般に、特定のコントロールに適用できる限り多くの手法を実装して、コントロールのパフォーマンスを確保し、多くのコンテナーで実行できるようにする必要があります。
これらの最適化の多くは、 MFC ActiveX コントロール ウィザードの [ コントロールの設定] ページで実装できます。
MFC ActiveX コントロール ウィザードの OLE 最適化オプション
MFC ActiveX コントロール ウィザードのコントロール設定 | アクション | 詳細情報 |
---|---|---|
[表示時にアクティブ化 ] チェック ボックス | 透明 | [表示時にアクティブ化] オプションをオフにする |
[ウィンドウなしのアクティブ化 ] チェック ボックス | 選択する | ウィンドウレス アクティブ化の提供 |
[Unclipped device context]\(クリップされていないデバイス コンテキスト \) チェック ボックス | 選択する | クリップされていないデバイス コンテキストの使用 |
[ちらつきのないアクティブ化 ] チェック ボックス | 選択する | Flicker-Free アクティブ化の提供 |
非アクティブな場合のマウス ポインター通知 チェック ボックス | 選択する | 非アクティブな状態でのマウス操作の提供 |
[最適化された描画コード ] チェック ボックス | 選択する | コントロール描画の最適化 |
これらの最適化を実装するメンバー関数の詳細については、「 COleControl」を参照してください。
詳細については、以下を参照してください。