Platform SDK: DirectX |
DirectInput デバイスのプロパティには、データ バッファのサイズ、軸が返す値の範囲と細分性、軸データが相対か絶対か、およびジョイスティックの物理的位置と報告データ間の関係に影響するジョイスティック軸のデッド ゾーンと飽和がある。特殊デバイスは、これ以外のプロパティを持つこともある。
1 つの例外 (フォース フィードバック デバイスのゲイン プロパティ) を除いて、プロパティは、デバイスが解放された状態にある場合に限り変更することができる。
IDirectInputDevice7::SetProperty メソッドまたは IDirectInputDevice7::GetProperty メソッドを呼び出す前に、DIPROPHEADER 構造体とデータの 1 つ以上の要素で構成されるプロパティ構造体を設定する必要がある。入力デバイスには多くのプロパティがあるので、SetProperty はこれらのプロパティを定義するあらゆる種類の構造体に対して機能できなくてはならない。DIPROPHEADER 構造体の目的は、プロパティ構造体のサイズとデータの解釈方法を定義することである。
DirectInput は、以下の事前定義されたプロパティ構造体を含む。
SetProperty の場合、プロパティ構造体のデータ メンバは、プログラマが設定する値である。GetProperty の場合は、現在の値がデータ メンバに返される。
GetProperty または SetProperty を呼び出す前に、DIPROPHEADER 構造体を以下の値で初期化しておかなければならない。
デバイス全体からプロパティを取得したり設定したりする場合、オブジェクト識別子 dwObj は、ゼロであり、dwHow メンバは、DIPH_DEVICE である。1 つのデバイス オブジェクト (たとえば、特定の軸) に対してプロパティを設定または取得したい場合は、dwObj と dwHow の組み合わせ値により、そのオブジェクトが識別される。詳細については、「DIPROPHEADER 構造体」を参照すること。
プロパティ構造体の設定後、取得または変更したいプロパティの識別子と共に、構造体のヘッダーのアドレスを、GetProperty または SetProperty に渡す。
SetProperty および GetProperty に渡されるプロパティを識別するために、以下の値が使用される。詳細については、「IDirectInputDevice7::GetProperty」を参照すること。
最後の 3 つのプロパティについての詳細は、「ジョイスティック軸データの解釈」も参照すること。
以下のサンプル コードでは、10 個のデータ項目を保持するようにデバイスのバッファ サイズを設定する。
DIPROPDWORD dipdw; HRESULT hres; dipdw.diph.dwSize = sizeof(DIPROPDWORD); dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); dipdw.diph.dwObj = 0; dipdw.diph.dwHow = DIPH_DEVICE; dipdw.dwData = 10; hres = lpdiDevice->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph);
DirectInputDevice.SetProperty メソッドまたは DirectInputDevice.GetProperty メソッドは、2 つのパラメータを取る。設定するプロパティを識別する文字列形式の GUID エイリアスと、Any 型のデータである。このデータは、次のいずれか 1 つの型で渡される。
SetProperty の場合、プロパティ型のデータ メンバは、プログラマが設定する値である。GetProperty の場合は、現在の値がデータ メンバに返される。
実際のプロパティ データに加えて、これら 2 つの型には、lHow、lObj、および lSize の 3 つのメンバが含まれる。
lHow と lObj の値は連係して機能する。lHow は、プロパティを設定または取得するデバイス オブジェクトを識別するのに使用されるシステムを表し、lObj はデバイス オブジェクトを識別する。
lHow が DIPH_BYID である場合、デバイス オブジェクトは、lObj の一意な数値識別子で表される。この ID は、デバイス オブジェクトを列挙した後に、DirectInputDeviceObjectInstance.GetType により返される値から抽出できる。
ほとんどのアプリケーションの場合、デバイス オブジェクトを識別する方法として比較的容易なのは、DirectInputDevice.SetCommonDataFormat または DirectInputDevice.SetDataFormat で確立されるデータ構造体内のオフセットを使用する方法である。この場合、lHow は DIPH_BYOFFSET であり、lObj はバイト単位のオフセットである。キーボード、マウス、および DIJOYSTATE 型のデータを受け取ることができる任意のゲーム コントローラの場合、デバイス オブジェクトは事前定義された定数で識別できる。「CONST_DIKEYFLAGS」、「CONST_DIMOUSEOFS」、および「CONST_DIJOYSTICKOFS」を参照すること。
lHow メンバも DIPH_DEVICE を含むことができる。つまり、プロパティの所属先は単一のデバイス オブジェクトではなく、そのデバイス全体である。バッファ サイズはそのようなプロパティの一例である。lHow が DIPH_DEVICE であれば、lObj はゼロである。
最後に、プロパティ タイプの lSize メンバは、そのタイプのサイズに初期化する必要がある。GetProperty や SetProperty は、渡されるプロパティのタイプを認識していないので、この手順は必ず実行しなければならない。
SetProperty および GetProperty に渡されるプロパティを識別するために、以下の文字列が使用される。詳細については、「DirectInputDevice.GetProperty」を参照すること。
無効ゾーン、範囲、および飽和値の詳細については、「ジョイスティック軸データの解釈」を参照すること。
以下のコードは、デバイスのバッファ サイズを設定する例である。
' diDev は、データ形式を設定済みの DirectInputDevice である。 Dim diProp As DIPROPLONG diProp.lHow = DIPH_DEVICE diProp.lObj = 0 diProp.lData = 10 diProp.lSize = Len(diProp) Call diDev.SetProperty("DIPROP_BUFFERSIZE", diProp)