相关文章推荐
听话的汤圆  ·  cmd ...·  1 周前    · 
风流倜傥的脆皮肠  ·  EASEC-2020-003 - ...·  5 天前    · 
想表白的沙滩裤  ·  python - HOW TO ...·  2 年前    · 
星星上的红烧肉  ·  Oracle PL/SQL ...·  2 年前    · 
行走的烤红薯  ·  Selenium ...·  2 年前    · 
打篮球的香菜  ·  Set-Label ...·  2 年前    · 

关于 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);