https://msdn.microsoft.com/ko-kr/library/windows/desktop/dd797987(v=vs.85).aspx
윈도우 api를 통해 조이스틱 사용하는 법
Getting the Driver Capabilities(드라이버 능력확인)
The following example uses joyGetNumDevs and joyGetPos to determine whether the joystick services are available and if a joystick is attached to one of the ports.
다음은 조이스틱 서비스를 이용할 수 있고 포트에 연결되었는지 결정하기위해 joyGetNumDevs와 joyGetPos를 사용하는 예이다.
JOYINFO joyinfo; UINT wNumDevs, wDeviceID; BOOL bDev1Attached, bDev2Attached;
//조이스틱 디바이스 개수가 0이면 if((wNumDevs = joyGetNumDevs()) == 0) return ERR_NODRIVER;
//조이스틱1이 연결되었는가? bDev1Attached = joyGetPos(JOYSTICKID1,&joyinfo) != JOYERR_UNPLUGGED;
//조이스틱2가 연결되었는가? bDev2Attached = wNumDevs == 2 && joyGetPos(JOYSTICKID2,&joyinfo) != JOYERR_UNPLUGGED;
//조이스틱1, 2중하나라도 연결되었다면 if(bDev1Attached || bDev2Attached) // decide which joystick to use 어떤조이스틱을 사용할지결정 wDeviceID = bDev1Attached ? JOYSTICKID1 : JOYSTICKID2; else return ERR_NODEVICE;
Capturing Joystick Input(조이스틱 입력 획득)
Most of the code controlling the joystick is in the main window function. In the following portion of the message handler, the application calls joySetCapture to capture input from the joystick JOYSTICKID1.
조이스틱을 제어하기위한 코드의 대부분은 메인 윈도우 함수안에 있다. 다음의 메시지 핸들러의 일부에서 어플리케이션은 JOYSTICKID1조이스틱에서 입력을 획득하기 위해 joySetCapture를 호출한다.
case WM_CREATE:
//리턴값이 0이 아닌경우 요청이 실패한것이다.
if(joySetCapture(hWnd, JOYSTICKID1, NULL, FALSE))
{
//비프음을 출력하고 메시지 박스로 안내 후 프로그램 종료 MessageBeep(MB_ICONEXCLAMATION); MessageBox(hWnd, "Couldn't capture the joystick.", NULL, MB_OK | MB_ICONEXCLAMATION); PostMessage(hWnd,WM_CLOSE,0,0L); } break;
Processing Joystick Messages(조이스틱메시지처리)
The following example illustrates how an application could respond to joystick movements and changes in the button states. When the joystick changes position, the application moves the cursor and, if either button is pressed, draws a bullet hole on the desktop. When a joystick button is pressed, the application draws a hole on the desktop and plays a sound continuously until a button is released. The messages to watch are MM_JOY1MOVE,MM_JOY1BUTTONDOWN, and MM_JOY1BUTTONUP.
다음의 예는 어플리케이션이 어떻게 조이스틱의 이동과 버튼의 상태변화에 응답할 수 있는지 예를 보여준다. 조이스틱의 위치가 변할때 어플리케이션에서 커서를 이동시키고, 버튼이 눌릴경우, 데스크탑에 총알구멍을 그린다. 조이스틱 버튼이 눌리는경우, 어플리케이션은 구멍을 그리고 동시에 버튼 눌림이 해제될때까지 사운드를 플레이 한다. 해당 메시지 들은 MM_JOY1MOVE, MM_JOY1BUTTONDOWN, MM_JOY1BUTTONUP 으로 관찰된다.
case MM_JOY1MOVE : // changed position 위치이동됨 if((UINT) wParam & (JOY_BUTTON1 | JOY_BUTTON2)) //wParam에는 버튼 눌림상태가 포함되있다. DrawFire(hWnd); DrawSight(lParam); // calculates new cursor position break; case MM_JOY1BUTTONDOWN : // button is down 조이스틱1 버튼눌림 if((UINT) wParam & JOY_BUTTON1) //1번 버튼이 눌린경우 { PlaySound(lpButton1, SND_LOOP | SND_ASYNC | SND_MEMORY); DrawFire(hWnd); } else if((UINT) wParam & JOY_BUTTON2) //2번 버튼이 눌린경우 { PlaySound(lpButton2, SND_ASYNC | SND_MEMORY | SND_LOOP); DrawFire(hWnd); } break; case MM_JOY1BUTTONUP : // button is up , 조이스틱1 버튼 눌림해제 sndPlaySound(NULL, 0); // stops the sound break;
'C/C++' 카테고리의 다른 글
이클립스 c++ 환경구축 (0) | 2016.10.27 |
---|---|
포인터의 포인터, 이중 포인터에 대해서 알아보자. (0) | 2014.05.08 |
c++ 기본자료형과 포인터 그리고 메모리 (0) | 2014.05.06 |
왜 소멸자는 virtual 로 만드나?(펌) (0) | 2014.05.02 |
delete 와 delete[] 의 차이점 (0) | 2014.05.02 |