win32API에서 조이스틱값을 입력 받아 보았다
소스에서 아래와 같이 mmsystem헤더와 더불어 winmm.lib를 link에 연결해줘야 한다.
|
#include <mmsystem.h> #pragma comment(lib, "winmm.lib")
|
BOOL JoyInit(HWND hwnd)
{
JOYINFOEX joyinfo;
UINT nValid = 0;
// 시스템에 어떤 조이스틱이 달렸는지 체크한다.
// 없으면 0을 주므로 FALSE리턴
if( joyGetNumDevs() == 0 )
return FALSE;
memset( &joyinfo,0,sizeof( JOYINFOEX));
joyinfo.dwSize = sizeof( JOYINFOEX );
joyinfo.dwFlags = JOY_RETURNBUTTONS | JOY_RETURNX | JOY_RETURNY;
// 1번 조이스틱이 연결되었나 알아본다.
if( joyGetPosEx( JOYSTICKID1 , & joyinfo ) != JOYERR_UNPLUGGED )
nValid = JOYSTICKID1; // 설정되었다면 1번 조이스틱이라고 명시
// 2번 조이스틱이 연결되었나 알아본다.
else if( joyGetPosEx( JOYSTICKID2 , & joyinfo ) != JOYERR_UNPLUGGED )
nValid = JOYSTICKID2;
else
return FALSE; // 이도 저도 아니면 에러
// 해당된 조이스틱 ID와 조이스틱이 움직일 거리를 설정
// 움직일 거리값이 작을수록 미세한 움직임에도 반응한다.
// 적당한 값을 넣어주면 됨 너무 커도 잘 안움직임. ^^; 푸하하하하~
joySetThreshold( nValid,100);
// 조이스틱의 메시지를 보낼 윈도우 핸들 설정
joySetCapture( hwnd, nValid,100,TRUE );
return TRUE;
}
/* 위의 함수는 조이스틱이 시스템에서 감지되면 TRUE를 리턴하고, 감지되지 않으면 FALSE를 리턴한다.
여기에 나와 있는 함수들이나 메시지들은 일반적인 윈도우즈 C의 Help에 자세히 나와 있으므로 더 이상 언급하지 않겠다.
이제 조이스틱의 마지막으로 얘기할 것은 조이스틱이 시스템으로 보내주는 메시지들이다.
위에서의 키보드와 같이 조이스틱도 어떠한 키나 방향핸들을 움직이면 해당된 윈도우 핸들에 메시지를 보내주는데,
바로 아래와 같은 메시지들을 보내준다. */
아래는 조이스틱 제어시 발생하는 메시지들이다.
MM_JOYnBUTTONDOWN //설정된 조이스틱의 n번째 버튼을 눌렀을때
MM_JOYnBUTTONUP //설정된 조이스틱의 n번째 버튼을 때었을때
MM_JOYnMOVE //설정된 n번째 조이스틱이 움직였을 때
소스에서 사용할때
CALLBACK WndProc 함수 안에 JoyInit(HWND hwnd)함수를 넣어준다
그리고
메시지처리는 아래와 같이 하면 된다.
|
case MM_JOY1BUTTONDOWN : //1번 버튼 눌렀을때의 처리.. y = HIWORD(lParam);
|