作者shaple (耍宝妈)
看板MATLAB
标题Re: [问题] GUI的滑鼠事件
时间Fri Jul 21 22:44:50 2006
※ 引述《dragonace ()》之铭言:
: 书上看到的一个例子:
: function mouse01(action)
这里表示这个函数的名字是mouse01
使用函数必须同时给定一个"action"(字串)输入
: % mouse01: 本例展示如何设定滑鼠事件的反应指令
: if nargin==0, action='start'; end
这行程式的意思是
当你程式呼叫 mouse01 且没有给定任何输入字串时
[[[程式码为 mouse01 ]]]
函数必须输入的action字串令他等於"start"
因为action='start' 所以在下面的switch里
函数会先执行case 'start' 里的程式内容
: switch(action)
: case 'start' % 开启图形视窗
: axis([0 1 0 1]); % 设定图轴范围
: box on; % 将图轴加上图框
: title('Click and drag your mouse in this window!');
: % 设定滑鼠按钮被按下时的反应指令为「mouse01 down」
: set(gcf, 'WindowButtonDownFcn', 'mouse01 down');
^^^^^^^^^^^^^^^^^
这行的意思如同%里说明的 :
如果在目前视窗有滑鼠按键被按下时执行mouse01 down这个程式
mouse01是函数名 down是mouse01这个函数执行时必须给定的输入字串
发现没 mouse01不就是目前自己这个函数吗
所以他是自己呼叫自己
因为要执行mouse01 输入字串是down
也就是说 action='down'
所以要执行switch的case 'down'
也就是正下方的那些内容
: case 'down' % 滑鼠按钮被按下时的反应指令
: % 设定滑鼠移动时的反应指令为「mouse01 move」
: set(gcf, 'WindowButtonMotionFcn', 'mouse01 move');
: % 设定滑鼠按钮被释放时的反应指令为「mouse01 up」
: set(gcf, 'WindowButtonUpFcn', 'mouse01 up');
: % 列印「Mouse down!」讯息
: fprintf('Mouse down!\n');
: case 'move' % 滑鼠移动时的反应指令
: currPt = get(gca, 'CurrentPoint');
: x = currPt(1,1);
: y = currPt(1,2);
: line(x, y, 'marker', '.', 'EraseMode', 'xor');
: % 列印「Mouse is moving!」讯息及滑鼠现在位置
: fprintf('Mouse is moving! Current location = (%g, %g)\n', ...
: currPt(1,1), currPt(1,2));
: case 'up' % 滑鼠按钮被释放时的反应指令
: % 清除滑鼠移动时的反应指令
: set(gcf, 'WindowButtonMotionFcn', '');
: % 清除滑鼠按钮被释放时的反应指令
: set(gcf, 'WindowButtonUpFcn', '');
: % 列印「Mouse up!」讯息
: fprintf('Mouse up!\n');
: end
: 第一个问题是set(gcf, 'WindowButtonDownFcn', 'mouse01 down');
: 滑鼠被按下的指令不是存在'mouse01 down'这个字串吗?
同上解说
滑鼠按下後要执行的函数不是存在'mouse01 down'这个字串
'mouse01 down'这个不是字串的意思
' '范围里的是要执行的function
'move''down''down'这些都是对mouse01来说所要输入的字串参数
: 可是接下来的case的事件都是'move''down''down'这些
: 所以set後面的第三个参数中 前面必须是这个function名称 後面才是存的指令吗??
顺便说明
set(gcf, 'WindowButtonMotionFcn', '');
^^^^^^
这里什麽都没有 也就是说什麽函数都不要执行
等於是说不要有任何动作 就是%里清除动作的意思了~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.183.43
1F:推 dragonace:酷!感谢!! 07/21 23:04