티스토리 뷰

12버튼 이상의 조이스틱 입력시 JoyStick 제어

원문 출처 : http://spherez.blog.me/60196065333

2가지 조이스틱 입력처리 방법이 있음.
1. DirectX의 DirectInput
2. winmm.lib / MMSYSTEM.H 를 사용

1번의 방법은 SDK를 설치해야한다.

2번의 JOYINFOEX 구조체를 사용한다.


 Step1. JoyStick 연결 초기화

1.JoyStick 연결
 - joyGetNumDevs() 함수를 이용하여 연결된 드라이버 수를 얻어온다. JoyStick 연결 뿐만아니라 다른 장치까지 확인한다. 리턴이 0이면 오류 처리함

2.JoyStick ID 찾기
- JOYINFOEX m_JoyStickInfo;
- joyGetPosEx(JOYSTICKID1, &M_JoyStickInfo)
2번 방식만 그런지 확인은 안했으나 Joystick ID가 2종류가 정의 되어잇다

JOYSTICKID1, JOYSTICKID2

joyGetPosEX() 조이스틱 상태를 얻어오는 함수인데 JOYSTICKID1 or JOYSTICKID2와 정보를 얻어 변수를 함수에 인자로 호출하면 결과를 리턴하게 된다.

JOYERR_NOERROR
JOYERR_PARMS
JOYERR_NOCANDO
JOYERR_UNPLUGGED

위 4가지를 리턴하는데 JOYERR_NOERROR 외에는 모두 에러이다.


3.JoyStick 사용정보와 사이즈 설정

- JOYINFOEX 구조체에서 사용할 정보의 범위 설정

m_JoyStickInfo.dwSize = sizeof(JOYINFOEX);
m_JoyStickInfo.dwFlags = JOY_RETURNALL;

if(joyGetPosEx(JOYSTICKID1, &m_JoyStickInfo) == JOYERR_NOERROR)
m_JoyStickID = JOYSTICKID1;

else if(joyGetPosEx(JOYSTICKID2, &m_JoyStickInfo) == JOYERR_NOERROR)
m_JoyStickID = JOYSTICKID2;

else AfxMessageBox("JoyStick Device Error!");


**joyGetPosEx() 함수 전에 JOYINFO에 사용할 정보의 범위 설정을 해야한다. 그렇지 않으면 프로그램 실행시 조이스틱을 찾지 못한다고함.

Comments