メインコンテンツ

マウス クリックのキャプチャ

マウス クリックへの応答をコントロールするプロパティ

オブジェクトがマウス クリックに応答するか、またその応答方法を決定する 2 つのプロパティがあります。

  • PickableParts — オブジェクトがマウス クリックをキャプチャするかどうかを設定する。

  • HitTest — オブジェクトがキャプチャしたマウス クリックに応答できるかどうかを決定する、またはマウス クリックを最も近い先祖に渡す。

オブジェクトは、応答可能な別のオブジェクトに到達するまで、マウス クリックをオブジェクト階層内で最も近い先祖に渡していきます。

マウス クリックへの応答のプログラミング

オブジェクトはマウス クリックをキャプチャして応答すると、以下の動作を行います。

  • マウスの左クリックへの応答としてボタンダウン関数を実行する。オブジェクトで ButtonDownFcn プロパティのコールバックを定義している場合、MATLAB® はそのコールバックを実行します。

  • マウスの右クリックへの応答としてコンテキスト メニューを表示する。オブジェクトで ContextMenu プロパティを使用してコンテキスト メニューを定義している場合、MATLAB はこのコンテキスト メニューを呼び出します。

メモ

Figure には PickableParts プロパティはありません。Figure はその HitTest プロパティの設定に関係なく、ボタン コールバック関数を実行します。

メモ

座標軸の PickableParts プロパティが 'none' に設定されていると、座標軸の子オブジェクトはマウス クリックをキャプチャできません。その場合、すべてのマウス クリックは Figure によってキャプチャされます。

PickablePart 値と HitTest 値の組み合わせ

PickableParts プロパティと HitTest プロパティを使用して、以下の動作を実装できます。

  • クリックされたオブジェクトはマウス クリックをキャプチャし、ボタンダウン コールバックまたはコンテキスト メニューで応答します。

  • クリックされたオブジェクトはマウス クリックをキャプチャし、ボタンダウン コールバックまたはコンテキスト メニューで応答可能ないずれかの先祖にそのマウス クリックを渡します。

  • クリックされたオブジェクトはマウス クリックをキャプチャしません。マウス クリックは、クリックされたオブジェクトの背面にあるオブジェクトによってキャプチャすることができます。

次の表は、プロパティ値に基づくマウス クリックへの応答をまとめたものです。

座標軸の PickablePartsPickablePartsHitTestマウス クリックの結果

visible/all

visible (既定の設定)

on (既定の設定)

オブジェクトの表示部分をクリックすると、ボタンダウン コールバックが実行されるか、コンテキスト メニューが呼び出されます。

visible/all

all

on

オブジェクトの一部が表示されていない場合でもそれをクリックすると、そのオブジェクトが現在のオブジェクトになり、ボタンダウン コールバックが実行されるか、コンテキスト メニューが呼び出されます。

visible/all/none

none

on/off

オブジェクトをクリックしても現在のオブジェクトにならず、ボタンダウン コールバックの実行もコンテキスト メニューの呼び出しも行われません。

none

visible/all/none

on/off

座標軸の子オブジェクトをクリックしても、ボタンダウン コールバックの実行もコンテキスト メニューの呼び出しも行われません。

MATLAB は、各オブジェクトの Parent プロパティを使用して、適切な先祖が見つかるか Figure に到達するまで先祖を検索します。

階層の上方へマウス クリックを渡す

次のオブジェクトの階層と、それらのオブジェクトの PickableParts および HitTest プロパティの設定を考えます。

次のコードで階層を作成します。

function pickHit
f = figure;
ax = axes;
p = patch(rand(1,3),rand(1,3),'g');
l = line([1 0],[0 1]);
set(f,'ButtonDownFcn',@(~,~)disp('figure'),...
   'HitTest','off')
set(ax,'ButtonDownFcn',@(~,~)disp('axes'),...
   'HitTest','off')
set(p,'ButtonDownFcn',@(~,~)disp('patch'),...
   'PickableParts','all','FaceColor','none')
set(l,'ButtonDownFcn',@(~,~)disp('line'),...
   'HitTest','off')
end

ラインのクリック

ラインを左クリックすると、以下の動作が行われます。

  • ラインは現在のオブジェクトになりますが、その HitTest プロパティが off のため、ButtonDownFcn コールバックを実行できません。

  • ラインはクリックを最も近い先祖 (親の座標軸) にしますが、親の座標軸はその ButtonDownFcn コールバックを実行できないためクリックを Figure に渡します。

  • Figure はコールバックを実行できるため、figure が MATLAB によりコマンド ウィンドウに表示されます。

パッチのクリック

パッチの FaceColor プロパティの値は none です。一方、パッチの PickableParts プロパティの値は all なので、パッチの空の面とエッジをクリックしてパッチを選択できます。

パッチの HitTest プロパティは on のため、パッチは現在のオブジェクトになることができます。パッチが現在のオブジェクトになると、そのボタンダウン コールバックを実行します。