次の方法で共有


コントロールがアクティブでないときのマウスとの対話

コントロールがすぐにアクティブ化されない場合は、コントロールが独自のウィンドウがない場合でも、WM_SETCURSORWM_MOUSEMOVE メッセージを処理する必要があります。 これは、既定で無効になる IPointerInactive インターフェイスの COleControl の実装を有効にして実行できます。(このインターフェイスの説明の ActiveX SDK を 参照してください)。このオプションを有効にするには、COleControl::GetControlFlagsによって返されるフラグを設定する pointerInactive フラグを追加する:

DWORD CMyAxOptCtrl::GetControlFlags()
{
   DWORD dwFlags = COleControl::GetControlFlags();


...


// The control can receive mouse notifications when inactive.
dwFlags |= pointerInactive;


...


   return dwFlags;
}

このフラグが含まれるコードは自動的にコントロールを MFC ActiveX コントロール ウィザードで作成すると コントロールの設定 ページの 非アクティブ時のマウス ポインター通知(M) オプションを選択すると生成されます。

IPointerInactive インターフェイスが有効な場合、コンテナーは、WM_SETCURSORWM_MOUSEMOVE メッセージに委任します。 IPointerInactiveCOleControl の実装はコントロールのメッセージ マップを通じてマウスの座標を適切に調整するとメッセージをディスパッチします。 メッセージ マップに対応するエントリを追加することによって、通常のウィンドウ メッセージなどのメッセージを処理できます。 これらのメッセージのハンドラーでは、最初に値が NULLでないことを確認するに m_hWnd のメンバー変数 (または、使用するメンバー関数) を使用しないでください。

またアクティブでないコントロールに OLE ドラッグ アンド ドロップ操作のターゲットとすることができます。 これは、コントロールのウィンドウがドロップ ターゲットとして登録できるようにユーザーが上にオブジェクトをドラッグして、コントロールをアクティブにする必要があります。 アクティベーションをドラッグ中に発生するには COleControl::GetActivationPolicyをオーバーライドし、POINTERINACTIVE_ACTIVATEONDRAG フラグを戻す:

DWORD CMyAxOptCtrl::GetActivationPolicy()
{
   return POINTERINACTIVE_ACTIVATEONDRAG;
}

IPointerInactive インターフェイスを有効にするには、コントロールにマウス メッセージを常に処理することができることを意味します。 IPointerInactive インターフェイスをサポートしないコンテナーの動作を取得するには、コントロールはそのほかのフラグの間の OLEMISC_ACTIVATEWHENVISIBLE フラグを含めるように表示されていた場合、常にする意味するコントロールが必要です。 ただし、このフラグをサポートする IPointerInactiveをコンテナーに反映されるように、OLEMISC_IGNOREACTIVATEWHENVISIBLE フラグを指定できるようにする:

static const DWORD BASED_CODE _dwMyOleMisc =
   OLEMISC_ACTIVATEWHENVISIBLE |
   OLEMISC_IGNOREACTIVATEWHENVISIBLE |
   OLEMISC_SETCLIENTSITEFIRST |
   OLEMISC_INSIDEOUT |
   OLEMISC_CANTLINKINSIDE |
   OLEMISC_RECOMPOSEONRESIZE;

参照

概念

MFC ActiveX コントロール : 最適化