次の方法で共有


デバイス プロパティ

デバイス プロパティ

Microsoft® DirectInput® デバイスのプロパティには、データ バッファのサイズ、軸が返す値の範囲と細分度、軸データが相対か絶対か、およびジョイスティック軸のデッド ゾーンと飽和がある。特殊なデバイスは、これ以外のプロパティを持つこともある。DirectInput で定義されるプロパティのリストについては、「IDirectInputDevice8::GetProperty」を参照すること。

1 つの例外 (フォース フィードバック デバイスのゲイン プロパティ) を除いて、プロパティは、デバイスが解放された状態にある場合に限り変更できる。

IDirectInputDevice8::SetProperty メソッドまたは IDirectInputDevice8::GetProperty メソッドを呼び出す前に、DIPROPHEADER 構造体と 1 つ以上のデータの要素で構成されるプロパティ構造体を設定する必要がある。入力デバイスには多くのプロパティがあるので、IDirectInputDevice8::SetProperty は、これらのプロパティを定義するあらゆる種類の構造体に対して機能できなくてはならない。DIPROPHEADER 構造体の目的は、プロパティ構造体のサイズとデータの解釈方法を定義することである。

DirectInput には、以下の事前定義されたプロパティ構造体がある。

  • DIPROPDWORD は、バッファ サイズなど単一の値を要求するプロパティに対する DIPROPHEADER および DWORD データ メンバを含む構造体を定義する。
  • DIPROPRANGE は、プロパティの範囲を定義するものであり、2 つの値 (最大値と最小値) を要求する。DIPROPHEADER 構造体と 2 つの LONG データ メンバで構成される。
  • DIPROPGUIDANDPATH は、DirectInput でサポートされていない HID (Human Interface Device) に対してアプリケーションが操作を実行できる、特殊なプロパティ構造体である。この構造体は、DIPROPHEADER 構造体、グローバル一意識別子 (GUID)、およびパスを表す Unicode 文字列で構成される。
  • DIPROPSTRING は、Unicode 文字列プロパティである。この構造体は、DIPROPHEADER 構造体と Unicode 文字列で構成される。

IDirectInputDevice8::SetProperty の場合、プロパティ構造体のデータ メンバは、開発者が設定する値である。IDirectInputDevice8::GetProperty の場合は、現在の値がデータ メンバに返される。

IDirectInputDevice8::GetProperty または IDirectInputDevice8::SetProperty を呼び出す前に、DIPROPHEADER 構造体を次の値で初期化しておかなければならない。

  • プロパティ構造体のサイズ。
  • DIPROPHEADER 構造体自体のサイズ。
  • オブジェクト識別子。
  • オブジェクト識別子の解釈方法を指示する値。

デバイス全体からプロパティを取得または設定する場合、オブジェクト識別子 dwHow はゼロであり、dwObj メンバは DIPH_DEVICE である。1 つのデバイス オブジェクト (たとえば、特定の軸) に対してプロパティを設定または取得する場合は、dwObjdwHow の組み合わせ値により、そのオブジェクトを識別できる。詳細については、「DIPROPHEADER」を参照すること。

プロパティ構造体の設定後、取得または変更するプロパティの識別子と共に、構造体のヘッダーのアドレスを IDirectInputDevice8::GetProperty または IDirectInputDevice8::SetProperty に渡す。

IDirectInputDevice8::SetProperty および IDirectInputDevice8::GetProperty に渡すプロパティを識別するために、次の値を使う。

最後の 3 つのプロパティの詳細については、「ジョイスティック軸データの解釈」も参照すること。

次のサンプル コードでは、10 個のデータ項目を保持するようにデバイスのバッファ サイズを設定する。

DIPROPDWORD  dipdw; 
HRESULT      hr; 
dipdw.diph.dwSize = sizeof(DIPROPDWORD); 
dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); 
dipdw.diph.dwObj = 0; 
dipdw.diph.dwHow = DIPH_DEVICE; 
dipdw.dwData = 10; 
hr = lpdiDevice->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph);