协调 overobj 和工具栏按钮以在 Matlab 中设置指针

Coordinating overobj and toolbar buttons to set pointer in Matlab

post 展示了如何使用 overobj 函数设置指针以改变 gui 的轴部分。问题是这将覆盖缩放或平移工具栏按钮设置的指针形状。我可以像这样测试各种工具栏按钮:

  if (strcmp(handles.zoom.State, 'off'))
    obj_han=overobj('axes');
    if ~isempty(obj_han)
      set(handles.figure1,'Pointer','cross');
    else
      set(handles.figure1,'Pointer','arrow');
    end
  end

但这需要为工具栏中的每个工具按钮添加一个新测试,这似乎是一个错误公式。例如zoom,如何设置指针?有没有更好的方法将更改指针与工具栏按钮进行更改的方式结合起来?

您可以使用未记录的 uimode and uimodemanager 获取当前 uimode,如果当前 uimode 为空,则 none 工具处于活动状态。

manager = uigetmodemanager(gcf);

% Only alter the pointer if the CurrentMode is empty
if isempty(manager.CurrentMode)
    if ~isempty(obj_han)
        set(handles.figure1, 'Pointer', 'cross')
    else
        set(handles.figure1, 'Pointer', 'arrow')
    end
end

我会检索 uimodemanager outside 并将其显式传递给回调,这样您就不必每次都检索它。