次の方法で共有


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

コントロールがすぐにアクティブ化されない場合は、コントロールで独自のペインがないても、それに WM_SETCURSORWM_MOUSEMOVE のメッセージを処理する必要があります。これは entity_CODECOleControl の既定で無効になっている IPointerInactive インターフェイスの実装を有効にすることにより実現できます。(このインターフェイスの詳細については 、 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 コントロール ウィザードで作成する場合 コントロール設定 のページの Mouse Pointer Notifications When Inactive オプションを選択した場合に生成されます。

IPointerInactive インターフェイスが有効な場合、コンテナーは、 WM_SETCURSORWM_MOUSEMOVE のメッセージに委任します。entity_CODECOleControl の IPointerInactive の実装は、コントロールのメッセージ マップを通じてマウスの座標を適切に調整するとメッセージをディスパッチします。メッセージ マップに対応するエントリを追加して、通常のウィンドウ メッセージなど、メッセージを処理できます。これらのメッセージのハンドラーでは、値が 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 コントロール : 最適化