DirectInput DirectInput 의 사용법 DirectInput 장치 장치의 능력 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
장치로부터의 입력을 요구하기 전에, 그 능력을 어느 정도 알아 둘 필요가 있다. 예를 들어, 조이스틱에 시점 하트가 붙어 있는지, 마우스는 사용자의 컴퓨터에 현재Attach되고 있는지, 등이다.
그러한 의문점은,IDirectInputDevice8::GetCapabilities 메서드를 호출하는 것으로 해결할 수 있다. 이 메서드는, 능력에 관한 데이터를 DIDEVCAPS 구조체에 돌려준다. Microsoft® DirectX® 외 구조체의 경우와 같게, 메서드에 이 구조체를 건네주기 전에,dwSize 멤버를 초기화해 두지 않으면 안 된다.
다음 코드는, 마우스가 Attach 되고 있는지라고 마우스가 제 3 축 (보통은 휠)을 가지고 있을지 어떨지를 조사하는 예이다. 여기서,lpdiMouse 는 유효한 Microsoft DirectInput® 장치를 나타낸다.
DIDEVCAPS DIMouseCaps; HRESULT hr; BOOLEAN WheelAvailable; DIMouseCaps.dwSize = sizeof(DIDEVCAPS); hr = lpdiMouse->GetCapabilities(&DIMouseCaps); WheelAvailable = ((DIMouseCaps.dwFlags & DIDC_ATTACHED) && (DIMouseCaps.dwAxes > 2));
버튼 또는 축이 존재할지 어떨지를 조사하기 위한 이제 1 개의 방법은, 그 개체에 대해서 IDirectInputDevice8::GetObjectInfo 를 호출하는 것이다. 그 호출에 대해서 DIERR_OBJECTNOTFOUND 가 돌아가는 경우, 개체는 존재하지 않는다. 다음 코드에서는, 제 3 축은 아닌으로 해도, z 축이 존재할지 어떨지를 판단한다.
DIDEVICEOBJECTINSTANCE didoi; didoi.dwSize = sizeof(DIDEVICEOBJECTINSTANCE); hr = lpdiMouse->GetObjectInfo(&didoi, DIMOFS_Z, DIPH_BYOFFSET); WheelAvailable = SUCCEEDED(hr);