Platform SDK: DirectX

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

[C++]

ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。

[Visual Basic]

DirectInput でマウスを使用するためのセットアップにおける最初の手順は、「チュートリアル 1 : キーボードの使用」で実行した手順とほぼ同じである。ScrawlB サンプルでは、Sub Main でいくつかのグローバル変数を宣言してから、次のように初期化を行う。

Public objDX As New DirectX7
Public objDI As DirectInput
.
.
.
Set objDIDev = objDI.CreateDevice("guid_SysMouse")
Call objDIDev.SetCommonDataFormat(DIFORMAT_MOUSE)
Call objDIDev.SetCooperativeLevel(frmCanvas.hwnd, _
        DISCL_FOREGROUND Or DISCL_EXCLUSIVE)
 

ここで、デバイスは排他コントロールを得る。その結果、アプリケーションがマウスを取得した状態にある限り、Windows はマウス メッセージを生成したり、システム カーソルを表示したりしない。DISCL_EXCLUSIVE は DISCL_FOREGROUND と組み合わせなければならない。なぜなら、アプリケーションがフォーカスを失った場合、マウスへの排他アクセスを持つことができず、データを取得することもできないからである。

ScrawlB サンプル アプリケーションはマウスに対する全責務を引き継ぐので、専用カーソルの位置を追跡したり、マウスの動きに合わせてカーソルの移動をスケーリングしたりしなければならない。次のグローバル変数は、カーソル座標 (メインフォームの左上隅からの相対ピクセル数) と移動スケーリングの格納に使用する。

Public g_cursorx As Long
Public g_cursory As Long
Public g_Sensitivity
 

Sub Main に戻り、バッファリング データを受け取ることができるように、DirectInputDevice.SetProperty メソッドを使ってバッファ サイズを設定する。

Dim diProp As DIPROPLONG
diProp.lHow = DIPH_DEVICE
diProp.lObj = 0
diProp.lData = BufferSize    ' BufferSize は定数
diProp.lSize = Len(diProp)
Call objDIDev.SetProperty("DIPROP_BUFFERSIZE", diProp)

次項 : ステップ 2 : 通知の設定