Platform SDK: DirectX |
ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。
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 : 通知の設定