[表示時にアクティブ] オプションのオフ
各コントロールには、アクティブおよび非アクティブという 2 つの基本的な状態があります。 従来、これらの状態は、コントロールがウィンドウを持つかどうかという形で判別されていました。 アクティブなコントロールはウィンドウを持ち、非アクティブなコントロールはウィンドウを持たないという分類でした。 ウィンドウなしのアクティブ状態が導入された結果、この区別はもう普遍的ではありませんが、今でも多くのコントロールに適用されます。
通常、ActiveX コントロールによって実行される初期化の残りの部分と比較すると、ウィンドウの作成は非常に負荷の高い操作です。 コントロールは、絶対に必要になるまでそのウィンドウの作成を延期するのが理想的です。
多くのコントロールは、コンテナーに表示されている間ずっと、アクティブである必要はありません。 多くの場合、コントロールは、それをアクティブにする必要がある操作をユーザーが実行する (たとえば、マウスでクリックしたり TAB キーを押したりする) まで非アクティブな状態のままにできます。 コンテナーでそれをアクティブにする必要があるまでコントロールを非アクティブのままにするには、コントロールのその他のフラグから OLEMISC_ACTIVATEWHENVISIBLE フラグを削除します。
static const DWORD BASED_CODE _dwNVC_MFC_AxOptOleMisc =
OLEMISC_SETCLIENTSITEFIRST |
OLEMISC_INSIDEOUT |
OLEMISC_CANTLINKINSIDE |
OLEMISC_RECOMPOSEONRESIZE;
コントロールを作成するときに、MFC ActiveX コントロール ウィザードの [コントロールの設定] ページで [Activate when visible] (表示時にアクティブ) オプションをオフにすると、OLEMISC_ACTIVATEWHENVISIBLE フラグは自動的に省略されます。