#include <mmsystem.h>
#pragma comment(lib, "winmm.lib");
JOYINFOEX joyinfo;
memset(&joyinfo, 0, sizeof(JOYINFOEX));
UINT nValid = 0;
joyinfo.dwSize = sizeof(JOYINFOEX);
joyinfo.dwFlags = JOY_RETURNBUTTONS | JOY_RETURNX | JOY_RETURNY;
// 조이스틱이 연결 됐는지 확인
if(joyGetPosEX(JOYSTICKID1, &joyinfo) != JOYERR_UNPLUGGED)
nValid = JOYSTICKID1;
else if(joyGetPosEX(JOYSTICKID1, &joyinfo) != JOYERR_UNPLUGGED)
nValid = JOYSTICKID2;
else
return FALSE;
joySetThreshold(nValid, 100);
// 해당된 조이스틱 ID와 조이스틱이 움직일 거리 설정
// 움직일 거리값이 작을 수록 미세한 움직임에도 반응
// 적당한 값을 넣어주면 됨 너무 커도 잘 안움직임
joySetCapture(hwnd, nValid, 100, TRUE);
// 조이스틱의 메시지를 보낼 윈도우 핸들 설정
윈도우 메시지로 사용시
CALLBACK WndProc() 안에 JoyInit(HWND hwnd) 넣어줌
조이스틱 발생 메시지
MM_JOYnBUTTONDOWN
MM_JOYnBUTTONUP
MM_JOYnMOVE
// 조이스틱 ID를 찾을때 (무식한 방법인듯)
numJoys = joyGetNumDevs();
for (int i = 0; i < numJoys; i++)
{
if (joyGetPosEx(i, &joyInfo) == JOYERR_NOERROR)
{
joyID = i; // JOYSTICKID1 아니면 JOYSTICKID2
break;
}
}
JOYCAPS joycap;
WORD joyMid;
WORD joyPid;
MMRESULT mr = joyGetDevCaps(joyID, &joycap, sizeof(JOYCAPS));
WORD joyMid = joycap.wMid;
WORD joyPid = joycap.wPid;
joyGetPosEx(UINT uJoyID, LPJOYINFOEX pji)로 값 확인 가능
pji 구조체 포인터를 통해서 입력값 확인
반환값
JOYERR_NOERROR : 문제 없음
JOYERR_PARMS : uJoyID가 유효하지 않거나 hWnd가 NULL
JOYERR_NOCANDO : 입력을 감지 못함
JOYERR_UNPLUGGED : 안꽂힘
cf. X Input의 경우
- 왼쪽 스틱 : dwXpos & dwYpos
- 오른쪽 스틱 : dwUpos & dwRpos
- 방향키 : dwPOV
중앙 : 65535, 8방향 : 0, 4500, 9000, 13500, 18000, 22500, 27000, 31500
- 왼쪽 트리거(L2) : dwZpos(~65408)
- 오른쪽 트리거(R2) : dwZpos(128~)
- 버튼 : dwButtons A(아래):1 B(오른):2 X(왼):4 Y(위):8
L1:16, R1:32, SELECT:64, START:128, L3:256, R3:512
cf. P3의 경우
- 왼쪽 스틱 : dwXpos & dwYpos
- 오른쪽 스틱 : dwZpos & dwRpos
- 방향키 : dwPOV
중앙 : 65535, 8방향 : 0, 4500, 9000, 13500, 18000, 22500, 27000, 31500
- 왼쪽 트리거(L2) : 64
- 오른쪽 트리거(R2) : 128
- 버튼 : dwButtons A(아래):1 B(오른):2 X(왼):4 Y(위):8
L1:16, R1:32, SELECT:256, START:512, L3:1024, R3:2048
'programing > C++' 카테고리의 다른 글
extern과 static (0) | 2016.10.09 |
---|---|
코드 최적화 (0) | 2016.09.20 |
[Modern C++] 스마트 포인터 (0) | 2016.08.16 |
[Modern C++] std::array (0) | 2016.08.16 |
[Modern C++] 유니폼 초기화(vector) (0) | 2016.08.16 |