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