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