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