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

DirectInput 의 사용법


여기에서는, Microsoft® DirectX DirectInput® 의 처리에 대해 설명한다. 이하의 설명이 포함된다.

보다 폭넓은 개요에 대해서는, 「DirectInput 에 대하며」를 참조할것.

더 자세한 정보는, 다음 주제를 참조할것.

DirectInput 의 생성

Microsoft® DirectInput® 애플리케이션에서는, 최초로 IDirectInput8 인터페이스를 얻어온다. 이것을 가장 간단하게 실시하는 방법은,DirectInput8Create 함수를 호출하는 것이다.

1 개의 Microsoft DirectInput 개체를 생성 해, 애플리케이션이 종료할 때까지 릴리즈 해서는 안 된다.

DirectInput 장치의 열거

DirectInput 는, 모든 사용 가능한 입력 장치를 시스템에 문의해 그것들이 접속되고 있는지를 판정해, 그러한 장치에 관한 정보를 돌려줄 수가 있다. 이 프로세스를 열거라고 부른다.

표준의 키보드, 마우스, 또는 그 양쪽 모두만을 애플리케이션으로 사용하고 있는 경우는, 사용 가능한 입력 장치를 열거할 필요는 없다. 「DirectInput 장치의 생성」으로 설명하도록(듯이),IDirectInput8::CreateDevice 메서드를 호출할 때는, 사전 정의된 글로벌 변수를 사용할 수 있다.

다른 모든 입력 장치, 및 복수의 키보드 또는 마우스를 사용하는 시스템에 관해서는,IDirectInput8::EnumDevicesIDirectInput8::EnumDevicesBySemantics 를 호출해, 사용 가능한 장치를 열거해, 적절한 장치를 선택할 수 있다. 또, 열거해, 사용 가능한 장치를 사용자를 선택할 수 있도록(듯이) 하는 일도 가능하다.

다음에,IDirectInput8::EnumDevices 메서드를 처리 하는 예를 나타낸다.

/* lpdi is a valid IDirectInput8 interface pointer.  */

GUID KeyboardGUID = GUID_SysKeyboard; 

lpdi->EnumDevices(DIDEVTYPE_KEYBOARD, 
                  DIEnumDevicesCallback, 
                  &KeyboardGUID, 
DIEDFL_ATTACHEDONLY);

최초의 인수는, 열거하는 장치의 타입을 지정한다. 타입에 관계없이 모든 장치를 열거하는 경우는, NULL 로 한다. 그 이외의 경우는,DIDEVICEINSTANCE 로 설명하고 있는 DIDEVTYPE_* 값의 1 개를 지정한다.

2 번째의 인수는, 열거된 각 장치에 대해서 1 회씩 호출하는 콜백 함수의 포인터이다. 이 함수는 임의의 이름으로 선언할 수 있지만, 여기에서는 플레이스홀더명의 DIEnumDevicesCallback 를 사용한다.

IDirectInput8::EnumDevices 메서드의 3 번째의 인수는, 콜백 함수에 건네주는 임의의 32 비트의 값이다. 이 예에서는, 글로벌 일의 식별자 (GUID) 형의 변수의 포인터이며, 콜백 함수가 이 변수에 키보드 인스턴스 식별자를 할당할 수 있도록(듯이) 한다.

4 번째의 인수는, 열거 대상이 모든 장치인가, 또는Attach되고 있는 장치만 (DIEDFL_ALLDEVICES 또는 DIEDFL_ATTACHEDONLY)인지를 지정하는 플래그이다.

애플리케이션이 복수의 입력 장치를 사용하고 있는 경우, 열거되었던 대로 장치를 초기화하려면 , 콜백 함수를 사용하는 것이 좋다 (예에 대해서는, 「튜토리얼 3 :조이스틱의 사용법」을 참조할것). 장치의 인스턴스 GUID 를 콜백 함수로부터 얻어온다. 여기에서는, 장치의 특정의 서브 타입을 검색하거나 장치명을 리스트 박스에 추가하거나 하는 등, 다른 처리를 실행할 수도 있다.

다음 코드는, 확장 키보드의 존재를 체크해, 발견되면 열거를 정지하는 예이다. 마지막에 발견된 키보드의 인스턴스 GUID 를 KeyboardGUID 변수 (전의 예의 IDirectInput8::EnumDevices 의 호출로, 주소가 pvRef 변수에게 건네지는 것)에 할당한다. 이 변수는, 다음에 IDirectInput8::CreateDevice 에 건네줄 수가 있다.

BOOL  hasEnhanced; 

BOOL CALLBACK DIEnumKbdCallback(LPCDIDEVICEINSTANCE lpddi, 
                                LPVOID pvRef) 
{ 
  *(GUID*) pvRef = lpddi->guidInstance; 
  if (GET_DIDEVICE_SUBTYPE(lpddi->dwDevType) == 
                       DIDEVTYPEKEYBOARD_PCENH) 
  { 
    hasEnhanced = TRUE; 
    return DIENUM_STOP; 
  } 
  return DIENUM_CONTINUE; 
} // End of callback

최초의 인수는, 장치의 정보를 저장 하는 DIDEVICEINSTANCE 구조체를 가리킨다. 이 구조체는, DirectInput 가 자동적으로 생성 한다.

2 번째의 인수는,IDirectInput8::EnumDevices 로부터 건네받은 데이터를 가리킨다. 이 경우는, 변수 KeyboardGUID 의 포인터이다. 이 변수에는 디폴트값을 할당할 수 있고 있지만, 장치가 열거될 때마다, 새로운 값을 할당할 수 있다. 단일의 키보드에 대해서 어느 인스턴스 GUID 를 사용할까는 실제로는 중요하지 않지만, 위에의 코드는, 콜백 함수로부터 인스턴스 GUID 를 얻어온다 방법을 구체적으로 가리키고 있다.

인스턴스 GUID 를 보존해, 다음에 DirectInputDevice 를 생성 할 수 있도록(듯이) 하는 것이 아니라, 열거중에 DirectInput 가 생성 한 장치를 보존할 수 있다. 더 자세한 정보는, 「DirectInput 장치의 생성」을 참조할것.

이 경우의 반환값은, 검색 대상의 장치가 발견되면 열거를 정지해, 그렇지 않으면 속행하는 것을 나타낸다. 열거는, 모든 장치의 열거가 종료 하면 곧바로 자동적으로 정지한다.

IDirectInput8::EnumDevicesBySemantics 에 의한 장치 열거의 더 자세한 정보는, 「액션 맙」을 참조할것.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP