Springhead Users Manual

10.5 キーボード・マウス

キーボードおよびマウスの機能は包括して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列挙子のいずれかの値を持ちます. xyはイベント生成時のカーソル座標を表します. 例として,左ボタンのプッシュイベントを処理するには次のように します.

// 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はキーボードのキーがプッシュされるかリリースされた際に呼ばれます. stateDVKeySt列挙子の値を持ちます. keyはプッシュあるいはリリースされたキーの仮想キーコードを保持します.

以下に関連する列挙子の定義を示します.

DVButtonMask

LBUTTON

左ボタン

RBUTTON

右ボタン

MBUTTON

中ボタン

SHIFT

Shiftキー押し下げ

CONTROL

Ctrlキー押し下げ

ALT

Altキー押し下げ

DVButtonSt

DOWN

ボタンプッシュ

UP

ボタンリリース

DVKeySt

PRESSED

押されている

TOGGLE_ON

トグルされている

APIとして提供される機能

以下に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は登録済のコールバッククラスを解除します.

GetKeyStateDVKeyCodeで指定したキーの状態をDVKeyStの値で返します.

GetMousePositioncountステップ前のマウスカーソルの位置を取得するのに用います. ただしcount\( 0 \)以上\( 63 \)以下でなければなりません. x, yにカーソル座標が,timeにタイムスタンプが格納さ れます.

サポート状況に関する注意

使用する実デバイスによっては一部の機能が提供されないので注意して下さい.

OnMouseMoveにおいてマウスホイールの回転量を取得するには, 実デバイスとしてDRKeyMouseWin32を使用するか, freeglutとリンクしてビルドしたSpringhead上でDRKeyMouseGLUTを使用する必要があります.

OnKeyにおいてキーのトグル状態を取得するには 実デバイスとしてDRKeyMouseWin32を使用する必要があります.

GetKeyStateDRKeyMouseWin32でのみサポートされます.

GetMousePositionにおいて,タイムスタンプを取得するにはDRKeyMouseWin32を用いる必要があります.