DirectInput DirectInput C/C++ 튜토리얼 튜토리얼 5 :액션 맵의 사용법 스텝 3 :장치에의 액션의 맵핑   [목차열람] [주소복사] [슬롯비우기]
스텝 3 :장치에의 액션의 맵핑
 
Microsoft DirectX 9.0

스텝 3 :장치에의 액션의 맵핑


목적의 맵핑을 정의할 수 있으면 그것을 물리 장치에 적용할 필요가 있다. IDirectInput8::EnumDevicesBySemantics 는, 다음 코드로 이 프로세스를 시작 한다. 여기서,m_pDI 는 이전에 정의된 IDirectInput8 개체를 나타낸다.

HRESULT hr;
hr = m_pDI->EnumDevicesBySemantics(m_strUserName, &m_diaf, 
EnumSuitableDevicesCB, this, 0L);

최초의 인수 m_strUserName 는, 맵핑의 설정이 다른 복수의 사용자를 대상으로 하는 경우에 유용하다. 다만, 예에서는 이 값에는 NULL 를 설정해, 현재 시스템에 로그 온 하고 있는 사용자를 나타낸다.

제 2 인수는, 맵핑 정보를 저장 하는 DIACTIONFORMAT 구조체의 주소이다.

제 3 인수는, 시스템상에서 장치가 발견될 때마다 불려 가는 콜백 함수의 주소이다. 샘플로 사용되고 있는 함수는,DIEnumDevicesBySemanticsCallback 함수에 근거하고 있다.

제 4 인수는, 콜백 함수로 이용할 수 있도록(듯이) 하는 임의의 32 비트값이다. 이 예에서는, MultiMapper 샘플에 대해, 다양한 액션 맵의 설정 및 조작의 함수에 사용되고 있는 클래스 개체를 가리키는 this 포인터이다. 이것에 의해, 콜백 함수는 클래스의 함수에의 액세스를 얻어온다.

마지막 인수는 플래그에 사용한다. 이 예에서는 플래그는 사용하지 않는다.

EnumSuitableDevicesCB 콜백 함수가 애플리케이션 정의의 함수 AddDevices 를 호출해, 다음에, 이 함수가 현재 열거중의 장치 pdidDeviceIDirectInputDevice8::BuildActionMap 함수를 호출한다. 다음 코드는, 이 호출을 나타내고 있다.

hr = pdidDevice->BuildActionMap( &m_diaf, m_strUserName, 0L );

여기에서도 최초의 인수는, 액션 맵을 저장 하는 DIACTIONFORMAT 구조체의 주소이다.

제 2 인수나, 필요에 따라서 똑같이 사용자명을 지정하지만, 여기에서는 NULL 를 지정한다.

마지막 인수는 제어 플래그를 보관 유지한다. 이 예에서는 플래그는 건네받지 않는다.

IDirectInputDevice8::BuildActionMap 는,DIACTIONFORMAT 구조체로 지정된 컨트롤의 할당 일람을 취득해, 열거중의 장치의 지정된 장치 개체에, 그 일람을 맵핑 하려고 한다. 맵핑의 결과는, 같은 구조체에 반환된다. 건네줄 때마다, 현재 열거중의 장치의 성질에 응해, 다른 컨트롤이 맵핑 된다. 예를 들어 키보드는, 특정의 키에의 맵핑을 지정하는 컨트롤을 맵핑 하지만, 버튼, 슬라이더, 또는 축을 지정하는 컨트롤은 맵핑 하지 않는다. 다음에 조이스틱이 열거되었을 경우,IDirectInputDevice8::BuildActionMap 는 키보드의 키에 맵핑 된 컨트롤은 무시하지만, 버튼, 슬라이더, 및 축으로 붙어서는, 조이스틱의 장치 개체에 맵핑 하려고 한다.

이 디폴트 맵핑의 결과를 조사해 조작할 수가 있다. 이것에 대해서는, 「스텝 4 :액션 맵의 구성과 적용」으로 실시한다.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP