http://blog.sina.com.cn/s/blog_544233cf0100fdxd.html
今天Google了一下Matlab是不是能跟蹤滑鼠移動的軌跡,真的可以!
Matlab GUI 如何響應滑鼠事件
摘自:MATLAB 程式設計與應用
這些性質都是附屬於一個圖形視窗,因此,他們規範了在此圖形視窗下,各項滑鼠事件的反應指令.
一般而言,我們希望滑鼠先被按下,然後再移動滑鼠時,才會觸發移動時的反應指令.欲達到此效果,我們必須做下列項:
在滑鼠按鈕被按下時,設定 WindowButtonMotionFcn 及 WindowButtonUpFcn 的值.
在滑鼠按鈕被釋放時,清除 WindowButtonMotionFcn 及 WindowButtonUpFcn 的值.
因此,只有在滑鼠按鈕被按下,且滑鼠在移動時,對應於WindowButtonMotionFcn 的反應指令才會被呼叫.
以下我們用一個簡單的例子來說明.在這個例子中,滑鼠事件會產生下列反應:
按下滑鼠時,MATLAB 指令視窗會出現「Mouse down!」的訊息.
按下並移動滑鼠時,MATLAB 會在圖形視窗畫出滑鼠軌跡,並指令視窗印出「Mouse is moving!」及當時滑鼠的位置.
釋放滑鼠時,MATLAB 指令視窗會出現「Mouse up!」的訊息.
代碼
function tmouse(action)
% TMOUSE 本例展示如何以Handle Graphics來設定滑鼠事件(Mouse
% Events)的反應指令(Callbacks)
if nargin == 0, action = 'start'; end
switch(action)
% 開啟圖形視窗
case 'start',
axis([0 1 0 1]);% 設定圖軸範圍
box on;% 將圖軸加框
title('Click and drag your mouse in this window!');
% 設定滑鼠按鈕被按下時的反應指令為「tmouse down」
set(gcf, 'WindowButtonDownFcn', 'tmouse down');
% 滑鼠按鈕被按下時的反應指令
case 'down',
% 設定滑鼠移動時的反應指令為「tmouse move」
set(gcf, 'WindowButtonMotionFcn', 'tmouse move');
% 設定滑鼠按鈕被釋放時的反應指令為「tmouse up」
set(gcf, 'WindowButtonUpFcn', 'tmouse 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