COleControl::GetActivationPolicy
更新 : 2007 年 11 月
IPointerInactive インターフェイスをサポートしているコントロールの既定のアクティベーション処理を変更します。
virtual DWORD GetActivationPolicy( );
戻り値
POINTERINACTIVE 列挙型のフラグの組み合わせ。以下の値が使用されます。
POINTERINACTIVE_ACTIVATEONENTRY
マウス移動操作中にマウスがオブジェクトに入ると、オブジェクトを埋め込み先編集の有効化にします。POINTERINACTIVE_DEACTIVATEONLEAVE
マウス移動操作中にマウスがオブジェクトから離れると、オブジェクトを非アクティブにします。POINTERINACTIVE_ACTIVATEONDRAG
ドラッグ アンド ドロップ操作中にマウスをオブジェクトの上にドラッグすると、オブジェクトを埋め込み先編集の有効化にします。
解説
IPointerInactive インターフェイスが有効な場合、コンテナは WM_SETCURSOR メッセージと WM_MOUSEMOVE メッセージを発行します。このインターフェイスの COleControl の実装では、マウス座標を適切に調整した後、コントロールのメッセージ マップからこれらのメッセージをディスパッチします。
コンテナは、IPointerInactive をサポートしている非アクティブ オブジェクト上にあるマウス ポインタから WM_SETCURSOR メッセージまたは WM_MOUSEMOVE メッセージを受け取るたびに、インターフェイスの GetActivationPolicy を呼び出し、POINTERINACTIVE 列挙型のフラグを返します。
これらのメッセージは、対応するエントリをメッセージ マップに追加することによって、本来のウィンドウ メッセージと同様に処理できます。ハンドラでは、m_hWnd メンバ変数 (またはこれを使用する任意のメンバ関数) を使用する前に、必ずその値が NULL でないことを確認してください。
マウス カーソルの設定や特殊な可視フィードバックの提供などのマウス移動イベント以外の処理を実行するオブジェクトは、POINTERINACTIVE_ACTIVATEONENTRY フラグを返し、アクティブになったときだけフィードバックを描画するようにします。オブジェクトがこのフラグを返す場合、コンテナは埋め込み先ですぐにオブジェクトをアクティブにし、GetActivationPolicy の呼び出しを発生させたのと同一メッセージをオブジェクトに送信します。
POINTERINACTIVE_ACTIVATEONENTRY と POINTERINACTIVE_DEACTIVATEONLEAVE フラグの両方が返された場合は、マウスがオブジェクト上にあるときにオブジェクトはアクティブになります。POINTERINACTIVE_ACTIVATEONENTRY フラグだけが返された場合は、マウスが初めてオブジェクト内に入ったときにアクティブになります。
非アクティブ コントロールを OLE ドラッグ アンド ドロップ操作のターゲットにすることもできます。この場合は、コントロールのウィンドウをドロップ ターゲットとして登録できるように、ユーザーがオブジェクトをコントロールにドラッグすると同時にコントロールをアクティブにする必要があります。ドラッグ中にコントロールをアクティブにするには、次のように POINTERINACTIVE_ACTIVATEONDRAG フラグを返すようにします。
DWORD CMyAxCtrl::GetActivationPolicy()
{
return POINTERINACTIVE_ACTIVATEONDRAG;
}
GetActivationPolicy で通信された情報は、コンテナによってキャッシュされません。代わりに、非アクティブ オブジェクトにマウスが入るたびに、このメソッドが呼び出されるようにします。
マウスが非アクティブ オブジェクトの中に入ったときに、埋め込み先編集の有効化が不要な場合、コンテナは、マウス ポインタがオブジェクト上にある限り OnInactiveSetCursor を呼び出すことによって、このオブジェクトへの WM_SETCURSOR メッセージをディスパッチします。
通常、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;
必要条件
ヘッダー : afxctl.h
参照
参照
COleControl::OnInactiveSetCursor
COleControl::OnInactiveMouseMove