如果您没有使用 GUIDE,因此没有handles
结构(见底部),您可以利用UserData
图形的属性来传递任何信息:
set(gcf,'UserData',pos);
然后,您可以pos
通过以下方式从其他任何地方访问:
pos = get(gcf,'UserData');
请参阅此 MathWorksUserData
属性描述和此完整示例。从第一页开始:
所有的 GUI 组件,包括菜单和图形本身都有一个UserData
属性。您可以将任何有效的 MATLAB 工作区值分配为UserData
属性值,但一次只能存在一个值。
作为此限制的解决方法,您可以分配一个struct
to UserData
,它具有存储在不同字段中的程序所需的所有属性。
我在上面的命令中遗漏的一个细节是图形/对象句柄(您可能实际上并不想使用gcf
)。在mytestfunction
你有它存储在f
. 在回调中,您可以找到hObject
by 的父图形:
f = ancestor(hObject,'figure');
使用上述方法的一种方法是简单地等待UserData
属性的变化:
function mytestfunction()
f=figure; set(f,'WindowButtonDownFcn',@mytestcallback)
maxPos=10; cnt=0;
while cnt<maxPos, waitfor(f,'UserData'); pos=get(gcf,'UserData'), cnt=cnt+1; end
function mytestcallback(hObject,~)
pos=get(hObject,'CurrentPoint');
set(ancestor(hObject,'figure'),'UserData',pos);
请注意,处理事件的另一种方法是实现一个侦听器来响应单击事件,但WindowButtonDownFcn
回调应该可以正常工作。
最初,我在考虑 GUIDE,您将拥有其中的handles
结构。这是该handles
结构的目的之一。将位置存储在 的字段中handles
,并更新它:
handles.pos = pos; % store it
guidata(hObject,handles); % update handles in GUI
然后返回mytestfunction
或任何其他回调需要访问,如果结构是最新的pos
,您可以使用。handles.pos
handles