DirectInput DirectInput 의 사용법 DirectInput 장치 장치 개체의 열거 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
특정의 장치상에서 어느 버튼 또는 축이 사용 가능한가를, 애플리케이션이 확인해야 하는 경우가 있다. 그 때문에(위해)는, 장치를 열거하는 경우와 같은 방법으로 장치 개체를 열거한다.
IDirectInputDevice8::EnumObjects 의 기능은,IDirectInputDevice8::GetCapabilities 어떤 정도 중복 하고 있다. 어느 쪽의 메서드도, 사용 가능한 버튼 또는 축이 몇개 있는지를 확인하기 위해서 사용할 수 있다. 그러나,IDirectInputDevice8::EnumObjects 는, 특정의 개체의 존재를 조사하는 것이 아니라, 사용 가능한 개체를 모두 카탈로그화하는 것을 목적으로 하는 메서드이다.
IDirectInputDevice8::EnumObjects 메서드에는,IDirectInput8::EnumDevices 등과 같이 콜백 함수가 있어, 각 개체에 대해서 다른 처리를 실행할 수 있다. 예를 들어, 개체를 리스트에 추가하거나 사용자 인터페이스상에 대응하는 항목을 생성 하거나 할 수 있다.
다음 코드는, 각 개체의 이름을 추출해, 캐릭터 라인 리스트 또는 배열에 추가할 수 있도록(듯이) 하는 콜백의 예이다. 이 표준 콜백은, 문서에서는 플레이스홀더명 DIEnumDeviceObjectsCallback 로 나타내지고 있지만, 임의의 이름을 붙일 수 있다. 이 함수는, 열거되는 각각 개체에 대해서, 1 회씩 호출된다.
char szName[MAX_PATH]; BOOL CALLBACK DIEnumDeviceObjectsCallback( LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef) { HRESULT hr = StringCchCopy(szName, MAX_PATH, lpddoi->tszName); if(SUCCEEDED(hr)) { // Now add szName to a list or array. . . . } else // Handle errors. return DIENUM_CONTINUE; }
최초의 인수는, 개체의 정보를 저장 하는 구조체의 포인터이다. 이 구조체는, Microsoft® DirectInput® 에 의해 생성 된다.
2 번째의 인수는,IDirectInputDevice8::EnumObjects 의 2 번째의 인수와 동등한 데이터에 대한 애플리케이션 정의 포인터이다. 예에서는, 이 인수는 사용하지 않는다.
이 경우의 반환값은, 열거하는 개체가 존재하는 한 열거가 계속되는 것을 나타낸다.
다음에 나타내는 것은,IDirectInputDevice8::EnumObjects 메서드를 호출해, 콜백 함수를 동작시키는 예이다.
lpdiMouse->EnumObjects(DIEnumDeviceObjectsCallback, NULL, DIDFT_ALL);
최초의 인수는, 콜백 함수의 주소이다. 2 번째의 인수는, 콜백 함수로 사용 또는 변경하는 데이터의 포인터로 할 수가 있다. 예에서는, 이 인수를 사용하지 않기 때문에, NULL 를 건네주고 있다. 3 번째의 인수는, 열거에 포함하는 개체의 타입을 나타내는 플래그이다. 이 예에서는, 모든 개체를 열거한다. 열거의 범위를 한정하려면 ,IDirectInputDevice8::EnumObjects 에 리스트 되는 다른 DIDFT_* 플래그를 1 개 또는 복수 사용한다.
어느 애플리케이션이 키보드에 대한 배타 액세스권을 가지고 있는 경우, DirectInput 는 모든 키보드 메시지를 억제한다. 다만, Ctrl+Alt+Del 키 및 Microsoft Windows® 95 나 Windows 98 에서의 Alt+Tab 키는 사용할 수 있다. Windows 2000 에서는, 배타 모드의 DirectInput 애플리케이션에 이어 기동되는 애플리케이션은, 키보드 데이터를 취득할 수 없다.