Microsoft DirectX 8.0 (Visual Basic)

ステップ 1 : マウスの設定

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 : 通知の設定」で説明する。