关于 MATLAB App Designer 中 UIFigure 添加鼠标点击的回调函数 WindowButtonDownFcn 和 直接 ButtonDownFcn 的区别

使用 MATLAB App Designer 设计交互界面,UIFigure 对象有两种 添加回调函数的方式

(1)直接 ButtonDownFcn

(2)WindowButtonDownFcn

其中,UIFigure 的 WindowButtonDownFcn 函数是当鼠标在 UIFigure 中点击时(无论是左键还是右键),程序调用的回调函数。这时,程序不管鼠标是在界面哪一个控件的区域内,只要点击,都调用该函数;

而 ButtonDownFcn 则是当控件位于该控件的区域内时,点击时所调用的函数。表面看起来似乎一样。主要区别在于,当 UIFigure 界面中包含如控件坐标区时,在该控件内单击鼠标,ButtonDownFcn 回调函数不起作用,而 WindowButtonDownFcn 起作用。如下图

UIFigure 中的控件 UIAxes,在其上点击鼠标,ButtonDownFcn 回调函数没反应


UIFigure 中的控件 UIAxes,在其上点击鼠标,WindowButtonDownFcn 回调函数有反应
回调函数代码
            pt = app.UIAxes.CurrentPoint;
            xp = pt(1,1)
            yp = pt(1,2)
% 如果当前点在 UIAxes 显示框的内部
% 此处 0 1 是因为把 UIAxes 显示框大小范围手动限制为了 0-1,如果设置为其他值,则相应更改即可
            if xp >= 0 &&...
                    xp <= 1 &&...
                    yp >= 0 &&...
                    yp <= 1
                app.X.Value = num2str(xp);
                app.Y.Value = num2str(yp); %-axes_pos(1)
                plot(app.UIAxes,xp ,yp,'k-o','MarkerFaceColor','y','LineWidth',2);