WindowButtonDownFcn conflicting with ButtonDownFcn

9 Ansichten (letzte 30 Tage)
Voulgarakis Georgios
Voulgarakis Georgios am 6 Feb. 2013
Bearbeitet: Mark am 13 Mai 2014
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?

Akzeptierte Antwort

Jan
Jan am 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'')';

Weitere Antworten (1)

Mark
Mark am 13 Mai 2014
Bearbeitet: Mark am 13 Mai 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"

Kategorien

Mehr zu Graphics Object Properties finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by