DirectInput DirectInput 의 사용법 DirectInput 장치 장치의 능력   [목차열람] [주소복사] [슬롯비우기]
장치의 능력
 
Microsoft DirectX 9.0

장치의 능력


장치로부터의 입력을 요구하기 전에, 그 능력을 어느 정도 알아 둘 필요가 있다. 예를 들어, 조이스틱에 시점 하트가 붙어 있는지, 마우스는 사용자의 컴퓨터에 현재Attach되고 있는지, 등이다.

그러한 의문점은,IDirectInputDevice8::GetCapabilities 메서드를 호출하는 것으로 해결할 수 있다. 이 메서드는, 능력에 관한 데이터를 DIDEVCAPS 구조체에 돌려준다. Microsoft® DirectX® 외 구조체의 경우와 같게, 메서드에 이 구조체를 건네주기 전에,dwSize 멤버를 초기화해 두지 않으면 안 된다.

  처리 속도나 메모리 사용을 최적화하기 위해서, 보다 작은 DIDEVCAPS_DX3 구조체를 사용할 수 있다. 구조체의 더 자세한 정보는, Dinput.h 를 참조할것.

다음 코드는, 마우스가 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); 


© 2002 Microsoft Corporation. All rights reserved.
↑TOP