matlab 回调函数问题,在Matlab中将实际值传递给回调函数

本文介绍了如何在Matlab中利用ButtonDownFcn和ResizeFcn回调函数捕获和传递鼠标点击的位置。建议使用ApplicationData类来存储数据,避免使用全局变量或userdata字段,以确保数据安全地在不同回调间传递。
摘要由CSDN通过智能技术生成

看起来您正在尝试存储鼠标单击位置的值,然后将这些值用作resize函数的一部分(稍后将调用它).我会做一些改变.

首先,使用另一个回调来捕获鼠标单击,而不是while循环.例如,您可以使用图形ButtonDownFcn回调来触发一个功能,该功能旨在将鼠标位置捕获到某个位置.

其次,有更好的方法来存储鼠标位置,正确的方法将取决于您的技能水平和您的程序的需要.其中一些存储数据的方法是:

>在另一个回调的参数中,就像你现在正在做的那样.这非常痛苦,但它可能有效.如果它足以满足您的需求,您可以保留它.

>大多数Matlab对象中的“userdata”字段.一些人提出了这个问题,它会很好.我不喜欢依赖于此,因为我总是担心其他一些工具也会想要使用userdata字段,而工具会覆盖数据.

>全局变量值.我不喜欢使用全局变量,出于同样的原因我不喜欢使用userdata字段.但是全局变量有时候是最好的解决方案.如果您一次只有一个数字,这可能是解决您问题的最简单,最省力的解决方案. (多个数字将推动您使用userdata解决方案作为最简单的解决方案.)

>提供一个句柄类来存储一些数据(即x和y),并将该类的副本提供给两个回调中的每一个(ButtonDownFcn和ResizeFcn).这允许两个函数传递数据,而不会污染任何其他人的命名空间.这是我最喜欢的解决这类问题的方法,所以我将在下面给它一个更详细的描述.

要执行上面的选项(4),需要一个类来存储看起来像这样的数据:

classdef ApplicationData < handle

properties (SetAccess = public, GetAccess = public)

x = [];

y = [];

end

end

请注意,由于ApplicationData扩展了句柄,因此Matlab将其视为传递引用对象,这对

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值