關於matlab鼠標響應


今天看了一下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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM