Microsoft DirectX 8.0 (Visual Basic) |
Microsoft® DirectInput® でマウスを使用するための設定の最初の手順は、「チュートリアル 1 : キーボードの使い方」で実行した手順とほぼ同じである。ScrawlB サンプルでは、Sub Main でいくつかのグローバル変数を宣言してから、次のように初期化を行う。
Public objDX As New DirectX8 Public objDI As DirectInput8 . . Set objDIDev = objDI.CreateDevice("guid_SysMouse") Call objDIDev.SetCommonDataFormat(DIFORMAT_MOUSE) Call objDIDev.SetCooperativeLevel(frmCanvas.hwnd, _ DISCL_FOREGROUND Or DISCL_EXCLUSIVE)
キーボードの場合とは反対に、DirectInput はマウスを排他的に制御する。その結果、アプリケーションがマウスを取得した状態にある限り、Microsoft Windows® はマウス メッセージを生成したり、システム カーソルを表示したりしない。DISCL_EXCLUSIVE は DISCL_FOREGROUND と組み合わせなければならない。なぜなら、アプリケーションがフォーカスを失った場合、マウスへの排他アクセスを持つことができず、データを取得することもできないからである。
ScrawlB サンプル アプリケーションはマウスに対する全責務を引き継ぐので、専用カーソルの位置を追跡したり、マウスの動きに合わせてカーソルの移動をスケーリングしたりしなければならない。次のグローバル変数は、カーソル座標 (メインフォームの左上隅からの相対ピクセル数) と移動スケーリングの格納に使用する。
Public g_cursorx As Long Public g_cursory As Long Public g_Sensitivity
Sub Main で、バッファリング データを受け取ることができるように、DirectInputDevice8.SetProperty メソッドを使ってバッファ サイズを設定する。
Dim diProp As DIPROPLONG diProp.lHow = DIPH_DEVICE diProp.lObj = 0 diProp.lData = BufferSize ' BufferSize は定数。 Call objDIDev.SetProperty("DIPROP_BUFFERSIZE", diProp)
次は、マウス イベントでデータ取得をトリガする方法について、「ステップ 2 : 通知の設定」で説明する。