7-5 嚙踝蕭嚙?M 嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭嚙踝蕭

在設計 GUI 時,千萬別忘了滑鼠的重要性,您可以設計一個圖形視窗,使得滑鼠在此圖形的各項動作(稱為「滑鼠事件」或 Mouse Events,例如按下滑鼠按鈕、移動滑鼠及釋放滑鼠按鈕等),都可以觸發一連串的反應指令,達成您要的效果。

在設定滑鼠事件的反應指令時,最相關的性質為:

  1. WindowButtonDownFcn:滑鼠按鈕按下時反應指令
  2. WindowButtonMotionFcn:滑鼠移動時的反應指令
  3. WindowButtonUpFcn:滑鼠按鈕釋放時的反應指令

這些性質都是附屬於一個圖形視窗,因此,他們規範了在此圖形視窗下,各項滑鼠事件的反應指令。

一般而言,我們希望滑鼠先被按下,然後再移動滑鼠時,才會觸發移動時的反應指令。欲達到此效果,我們必須做下列事項:

因此,只有在滑鼠按鈕被按下,且滑鼠在移動時,對應於 WindowButtonMotionFcn 的反應指令才會被呼叫。

以下我們用一個簡單的例子來說明。在這個例子中,滑鼠事件會產生下列反應:

範例如下:

Example 1: 07-握把式圖形與GUI設計/mouse01.mfunction mouse01(action) % mouse01: 本例展示如何設定滑鼠事件的反應指令, based on "switchyard programming" % Roger Jang, 20040405 if nargin<1, action='start'; end 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'); 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', '.'); % 列印「Mouse is moving!」訊息及滑鼠現在位置 fprintf('Mouse is moving! Current location = (%g, %g)\n', x, y); case 'up' % 滑鼠按鈕被釋放時的反應指令 % 清除滑鼠移動時的反應指令 set(gcf, 'WindowButtonMotionFcn', ''); % 清除滑鼠按鈕被釋放時的反應指令 set(gcf, 'WindowButtonUpFcn', ''); % 列印「Mouse up!」訊息 fprintf('Mouse up!\n'); end

上述範例只顯示一個空白視窗,您可以在視窗內進行滑鼠的點選及拖曳,即可在滑鼠點選的位置產生圖形:


MATLAB程式設計:入門篇