今天看了一下Matlab中響應鼠標的事件,整理如下,
(1)函數WindowButtonMotionFcn,當鼠標在窗口上運動的時候就會相應此函數,於是在此函數中可以設置運動時想要的代碼,如:改變鼠標的形狀:
1 if 滿足某一個條件 2 set(gcf,'Pointer','hand') % 設置為手的形狀 3 else 4 set(gcf,'Pointer','arrow') % 設置為箭頭的形狀 5 end
(2)函數WindowButtonDownFcn,當鼠標按下去的時候就會響應的函數,但是鼠標按下分為左鍵和右鍵,如何區分:
1 if strcmp(get(gcf,'SelectionType'),'alt') 2 % 此時即為右鍵 3 elseif strcmp(get(gcf,'SelectionType'),'normal') 4 % 此時即為左鍵 5 end
屬性SelectionType用來判斷鼠標按鍵的類型,可能的值包括(Windows系統上):
- normal:代表單擊鼠標左鍵;
- extend:代表Shift+左鍵,或者同時按左右鍵;
- alt:代表Ctrl+左鍵,或者單擊右鍵;
- open:代表雙擊鼠標任意鍵。
(3)函數WindowButtonUpFcn,當鼠標被按下后起來的時候的響應函數,同理,可以在里面設置自己想要的代碼。
(4)有時候這些函數會綜合使用,如:利用Matlab設計一個畫圖板的時候,經常用得到。
舉個栗子:
第一種途徑:ginput()函數
ginput提供了一個十字光標使我們能更精確的選擇我們所需要的位置,並返回坐標值。函數調用形式為:
[x,y] = ginput(n)
[x,y] = ginput
[x,y,button] = ginput(...)
對於[x,y] = ginput(n),能使你從當前的坐標系中讀取n個點,並返回這n個點的x,y坐標,均為nX1的向量。可以按回車提前結束讀數。
[x,y] = ginput 可以無限的讀取坐標直到按下回車鍵。
[x,y,button] = ginput(...) 返回x和y的坐標,以及button值(1=左鍵,2=中,3=右)或者按鍵的ASXII碼值。
第二種途徑:利用figure的WindowButtonDownFcn屬性。當你在圖上按下鼠標的時候,可通過該屬性定義一個回調程序。回調程序可以是一個有效的Matlab表達式或者一個M文件。
那么為顯示當前鼠標按下時的坐標值,我們可以將其定義為一個坐標獲取和顯示程序。
例如:
1 % 主函數 2 function test_mouse_track() 3 figure; 4 axis([-10,10,0,5]); 5 set(gcf,'WindowButtonDownFcn',@ButttonDownFcn);
1 % 回調函數 2 function ButttonDownFcn(src,event) 3 pt = get(gca,'CurrentPoint'); 4 x = pt(1,1); 5 y = pt(1,2); 6 fprintf('x=%f,y=%f\n',x,y);
附:http://zhidao.baidu.com/link?url=10iOFLUKbZHWtwQr02h7LjAYomOQXzJdufxQkBrOi-8HJZmx9fJ2WA1UDbtX0zkg-KS_aOykjmzLq4dCNOYrDxt4VrnnzFJD-sI8uQ871Hu
http://blog.sina.com.cn/s/blog_4d633dc70100nvl0.html