MFC ActiveX コントロール : 最適化
ここでは、ActiveX コントロールを最適化してパフォーマンスを向上する方法について説明します。
「[表示時にアクティブ] オプションのオフ」と「コントロールがアクティブでないときのマウスとの対話」では、アクティブになるまでウィンドウを作成しないコントロールについて説明します。 「ウィンドウなしのアクティベーション」では、ウィンドウを一切 (アクティブになったときにも) 作成しないコントロールについて説明します。
Windows は、OLE オブジェクトを 2 つの主要な欠点があります。彼らオブジェクト透明またはアクティブなときに、四角形以外、彼らは大きなオーバーヘッドをインスタンスの作成とコントロールの表示に追加します。 一般に、コントロールの作成にかかる時間のうちの 60 パーセントが、ウィンドウの作成に費やされます。 1 つの共有ウィンドウ (通常はコンテナーのウィンドウ) と多少のディスパッチ コードを使うだけで、コントロールは、通常と同じウィンドウ サービスをパフォーマンスを低下させずに使用できます。 ウィンドウは、多くの場合、オブジェクトにとって不要なオーバーヘッドとなります。
コントロールを使用するコンテナーによっては、最適化によってパフォーマンスが改善されない場合もあります。 たとえば、1996 年より前にリリースされたコンテナーでは、ウィンドウなしのアクティベーションがサポートされていないため、この機能を実装しても効果は得られません。 一方、永続化はほとんどのコンテナーでサポートされているため、コントロールの永続化コードを最適化すると、コンテナーにおけるコントロールのパフォーマンスが向上します。 ある特定の種類のコンテナーだけで使用されるコントロールについては、そのコンテナーで使用されている最適化の種類を確認してください。 ただし、通常は、あらゆるコンテナーにおいてコントロールの最大限のパフォーマンスを実現できるように、コントロールに適用可能な最適化の手法をできるだけ多く実装するようにしてください。
このような最適化の多くは、MFC ActiveX コントロール ウィザードの、[コントロールの設定] ページで実装できます。
MFC ActiveX コントロール ウィザードの OLE 最適化オプション
MFC ActiveX コントロール ウィザードのコントロールの設定 |
操作 |
詳細情報 |
---|---|---|
[表示時にアクティブ] チェック ボックス |
Clear |
|
[ウィンドウなしでアクティブ] チェック ボックス |
選択 |
|
[クリッピングを行わないデバイス コンテキスト] チェック ボックス |
選択 |
|
[ちらつきなしでアクティブ化] チェック ボックス |
選択 |
|
[非アクティブ時のマウス ポインター通知] チェック ボックス |
選択 |
|
[最適化された描画コード] チェック ボックス |
選択 |
これらの最適化機能を実装するメンバー関数の詳細については、「COleControl クラス」を参照してください。 各メンバー関数は、COleControl のメンバーやCOleControl のメンバーのように、用途別に一覧表示されています。
詳細については、次のトピックを参照してください。