Lighthouse3d.com >> GLUT Tutorial >> Input >> The Mouse函數
上一節咱們討論了怎麼用GLUT的鍵盤函數跟OpenGL應用程序進行交互.如今來探討鼠標的.GLUT的鼠標接口提供了一堆可選的事件來添加鼠標交互,來監測鼠標點擊和鼠標移動.工具
監測鼠標點擊事件spa
和鍵盤事件同樣,GLUT提供了響應鼠標點擊事件的註冊回調函數.函數名是glutMouseFunc,也是在程序的初始化語句中被調用.原型以下:3d
void glutMouseFunc(void (*func)(int button, int state, int x, int y));接口
func - 鼠標點擊事件的觸發函數名事件
在glutMouseFunc函數的原型中能夠看到4個參數.get
第一個參數表示按下或釋放了哪一個鍵,該參數有3個常量值選項:原型
GLUT_LEFT_BUTTON回調函數
GLUT_MIDDLE_BUTTONio
GLUT_RIGHT_BUTTON
第二個參數表示事件觸發時按鍵的狀態,例如是按下仍是釋放.可選值是:
GLUT_DOWN
GLUT_UP
當一個事件回調被帶着GLUT_DOWN狀態觸發的時候,應用程序會自動判定GLUT_UP的狀態會在鼠標移離窗體的時候自動觸發.
剩下的兩個參數是提供了相對於窗體客戶區域左上角的x,y座標.
監測鼠標移動
GLUT爲應用程序提供鼠標移動監測的能力.有兩類移動GLUT能夠監測:活躍移動和靜默移動.活躍移動是鼠標移動且鼠標鍵按下時觸發.靜默移動是鼠標移動且鼠標鍵沒按下時觸發.若是應用程序正在跟蹤活動,在鼠標移動的期間每幀都會生成事件.
和以前同樣,你要註冊GLUT回調函數來響應控制移動事件.GLUT容許咱們指定兩個不一樣的函數: 以個跟蹤靜默移動,一個跟蹤活躍移動.原型以下:
void glutMotionFunc(void (*func) (int x,int y));
void glutPassiveMotionFunc(void (*func) (int x, int y));
func - 響應各自類型的移動的處理函數.
處理函數的參數是相對於窗體客戶區域左上角的x,y座標.
檢測鼠標進入和離開窗體
GLUT能夠檢測鼠標離開或進入窗體區域的動做.一個回調函數能夠用於控制這兩個事件.原型以下:
void glutEntryFunc(void (*func)(int state));
func - 處理函數
該處理函數的參數是表示鼠標已進入/已離開窗體區域.GLUT定義兩個常量值以用於描述狀態:
GLUT_LEFT
GLUT_ENTERED
注意: 在微軟的窗體中,該函數不太精確,由於在微軟系統中,焦點轉移是要經過鼠標點擊.雖然你能夠經過微軟提供的工具更改該特性,可是有的人可能認爲這是標準設置,不在微軟窗體中使用該特性來監測鼠標進入/離開窗體會是更好的選擇.