Re: [問題] GUI的滑鼠事件
※ 引述《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
推
07/21 23:04, , 1F
07/21 23:04, 1F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章