Azzera filtri
Azzera filtri

WindowButtonDownFcn conflicting with ButtonDownFcn

12 visualizzazioni (ultimi 30 giorni)
What I want to achieve is this:
user clicks on an axes: -Run CallbackA
user clicks somewhere else in the figure: -Run CallbackB
What I have done is to set the ButtonDownFcn (CallbackA) of axes, and the WindowButtonDownFcn (CallbackB) of the figure.
Now the thing is that whenever I click on an axes, it runs both Callbacks (both WindowButtonDownFcn and ButtonDownFcn are triggered).
Can I avoid this, and trigger only one of them?

Risposta accettata

Jan
Jan il 6 Feb 2013
You can insert an axes object spanning this whole figure as a background and use its ButtonDownFcn:
BGcolor = get(0, 'DefaultFigureColor');
BGaxes = axes('Units', 'normalized', 'Position', [0,0,1,1], ...
'XTicks, [], 'YTicks', [], ...
'Color', BGcolor, 'XColor', BGcolor, 'YColor', BGcolor, ...
'ButtonDownFcn', 'disp(''Background'')');
DataAxes = axes('ButtonDownFcn', 'disp(''Data'')';

Più risposte (1)

Mark
Mark il 13 Mag 2014
Modificato: Mark il 13 Mag 2014
I was playing around with this recently and noticed that the ButtonDownFcn callback (not WindowButtonDownFcn) for a figure is only activated when the background is clicked. Try this:
hFig = figure;
hAx = axes;
set(hFig, 'ButtonDownFcn', @(~,~) disp('clicked background'));
set(hAx, 'ButtonDownFcn', @(~,~) disp('clicked axes'));
See documentation on figure properties:
"Button press callback function. Executes whenever you press a mouse button while the pointer is in the figure window, but not over a child object"

Categorie

Scopri di più su Graphics Object Properties in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by