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

장치 개체의 열거


특정의 장치상에서 어느 버튼 또는 축이 사용 가능한가를, 애플리케이션이 확인해야 하는 경우가 있다. 그 때문에(위해)는, 장치를 열거하는 경우와 같은 방법으로 장치 개체를 열거한다.

  장치 드라이버에 의한 제약을 위해, 키보드의 키 및 인디케이터(indicator) 라이트의 열거는 신뢰할 수 없다. 잘못해 개체가 존재 하면 보고되는 경우가 있다. 사용 가능한 키에 관한 기본적인 정보는, 장치의 서브 타입으로부터 취득할 수 있지만, 메뉴 키등의 추가 개체가 사용 가능한가 어떤가를 판단하려면 , 사용자에 입력을 요구하는 것 외에 방법은 없다.

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 개 또는 복수 사용한다.

  DIDFT_* 플래그의 일부는, 다른 플래그를 조합한 것이다. 예를 들어, DIDFT_AXIS 는, DIDFT_ABSAXIS | DIDFT_RELAXIS 와 동등하다.

어느 애플리케이션이 키보드에 대한 배타 액세스권을 가지고 있는 경우, DirectInput 는 모든 키보드 메시지를 억제한다. 다만, Ctrl+Alt+Del 키 및 Microsoft Windows® 95 나 Windows 98 에서의 Alt+Tab 키는 사용할 수 있다. Windows 2000 에서는, 배타 모드의 DirectInput 애플리케이션에 이어 기동되는 애플리케이션은, 키보드 데이터를 취득할 수 없다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP