协调 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 并将其显式传递给回调,这样您就不必每次都检索它。
此 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 并将其显式传递给回调,这样您就不必每次都检索它。