キーボードおよびマウスの機能は包括して1つのクラスとして提供されています. キーボード・マウスの仮想デバイスはDVKeyMouseです. 実デバイスとしてはWin32 APIを用いるDRKeyMouseWin32とGLUTを用い るDRKeyMouseGLUTがあります. 提供される機能に多少の差異があるので注意して下さい.
Ascii外の特殊キーには処理系依存のキーコードが割り当てられています. この差を吸収するために以下のシンボルがDVKeyCode列挙型で定義されています.
|
DVKeyCode |
|
|
ESC |
エスケープ |
|
F1 - F12 |
ファンクションキー |
|
LEFT |
← |
|
UP |
↑ |
|
RIGHT |
→ |
|
DOWN |
↓ |
|
PAGE_UP |
Page Up |
|
PAGE_DOWN |
Page Down |
|
HOME |
Home |
|
END |
End |
|
INSERT |
Insert |
必要に応じてシンボルが追加される可能性がありますので,完全なリストはヘッダファイルで確認してください.
DVKeyMouseからのイベントを処理するにはDVKeyMouseCallbackクラスを継承し,イベントハンドラをオーバライドします. DVKeyMouseCallbackはいくつかのヒューマンインタフェースクラスが継承しているほか, 後述 するアプリケーションクラスFWAppも継承しています.
|
DVKeyMouseCallback |
|
|
virtual bool |
OnMouse(int button, int state, int x, int y) |
| マウスボタンプッシュ/リリース | |
|
virtual bool |
OnDoubleClick(int button, int x, int y) |
| ダブルクリック | |
|
virtual bool |
OnMouseMove(int button, int x, int y, int zdelta) |
| マウスカーソル移動/マウスホイール回転 | |
|
virtual bool |
OnKey(int state, int key, int x, int y) |
| キープッシュ/リリース | |
OnMouseはマウスボタンのプッシュあるいはリリースが生じたときに呼び出されます. buttonはイベントに関係するマウスボタンおよびいくつかの特殊キーの識別子を保持し, その値はDVButtonMask列挙子の値のOR結合で表 現されます. stateはマウスボタン状態変化を示し,DVButtonSt列挙子のいずれかの値を持ちます. x,yはイベント生成時のカーソル座標を表します. 例として,左ボタンのプッシュイベントを処理するには次のように します.
// inside your class definition ...
virtual bool OnMouse(int button, int state, int x, int y){
if(button & DVButtonMask::LBUTTON && state == DVButtonSt::DOWN){
// do something here
}
}
OnDoubleClickはマウスボタンのダブルクリックが生じたときに呼ばれます. 引数の定義はOnMouseと同様です.
OnMouseMoveはマウスカーソルが移動するか,マウスホイールが回転した際に呼ばれます. buttonは直前のマウスプッシュイベントにおいてOnMouseに渡されたのと同じ値を持ちます. x, yは移動後の カーソル座標,zdeltaはマウスカーソルの回転量です.
OnKeyはキーボードのキーがプッシュされるかリリースされた際に呼ばれます. stateはDVKeySt列挙子の値を持ちます. keyはプッシュあるいはリリースされたキーの仮想キーコードを保持します.
以下に関連する列挙子の定義を示します.
|
DVButtonMask |
|
|
LBUTTON |
左ボタン |
|
RBUTTON |
右ボタン |
|
MBUTTON |
中ボタン |
|
SHIFT |
Shiftキー押し下げ |
|
CONTROL |
Ctrlキー押し下げ |
|
ALT |
Altキー押し下げ |
|
DVButtonSt |
|
|
DOWN |
ボタンプッシュ |
|
UP |
ボタンリリース |
|
DVKeySt |
|
|
PRESSED |
押されている |
|
TOGGLE_ON |
トグルされている |
以下にDVKeyMouseの関数を示します.
|
DVKeyMouseIf |
|
|
void |
AddCallback(DVKeyMouseCallback*) |
|
void |
RemoveCallback(DVKeyMouseCallback*) |
|
int |
GetKeyState(int key) |
|
void |
GetMousePosition(int& x, int& y, int& time, int count=0) |
AddCallbackはコールバッククラスを登録します. 一つの仮想デバイスに対して複数個のコールバックを登録できます. RemoveCallbackは登録済のコールバッククラスを解除します.
GetKeyStateはDVKeyCodeで指定したキーの状態をDVKeyStの値で返します.
GetMousePositionはcountステップ前のマウスカーソルの位置を取得するのに用います. ただしcountは以上
以下でなければなりません. x, yにカーソル座標が,timeにタイムスタンプが格納さ
れます.
使用する実デバイスによっては一部の機能が提供されないので注意して下さい.
OnMouseMoveにおいてマウスホイールの回転量を取得するには, 実デバイスとしてDRKeyMouseWin32を使用するか, freeglutとリンクしてビルドしたSpringhead上でDRKeyMouseGLUTを使用する必要があります.
OnKeyにおいてキーのトグル状態を取得するには 実デバイスとしてDRKeyMouseWin32を使用する必要があります.
GetKeyStateはDRKeyMouseWin32でのみサポートされます.
GetMousePositionにおいて,タイムスタンプを取得するにはDRKeyMouseWin32を用いる必要があります.