천문 장비 혹은 필요한 도구들을 스스로 만들기 위한 정보들을 교환하는 장입니다.
우리가 함께 만든 우주선이 달나라에 가지 말라는 법이 있을까요?
총 게시물 111건, 최근 0 건
   
[자작세상] Win32API에서 조이스틱제어 성공~!
글쓴이 : 정재원 별님 날짜 : 2009-07-23 (목) 19:19 조회 : 8658

 

 

 

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번 버튼 눌렀을때의 처리..
         break;
 case MM_JOY2BUTTONUP : //2번 버튼이 때어졌을때의 처리..
         break;
 case MM_JOY1MOVE : 
   //LONG형 lParam에 하위 WORD엔 X좌표 값이, 상위 WORD엔  Y 좌표값이 들어간다.
         x = LOWORD(lParam) ;

         y = HIWORD(lParam); 
   //1번 스틱이 움직였을때의 처리
         break;

 

 

 

 

 

 

 

http://blog.naver.com/6k5tvb


   

총 게시물 111건, 최근 0 건
번호 이미지 제목 글쓴이 날짜 조회 추천
66 [자작세상] Win32API에서 조이스틱제어 성공~! 정재원별님 07-23 8659 0
65 [자작세상] API - DrawGraphLib 1.5 -기능추가 +1 정재원별님 07-05 6643 0
64 [자작세상] API- GPS : 2차원그래프활용 : 정재원별님 06-29 7140 0
63 [자작세상] API- 그래프그리기DrawGraphLib 1.0 +10 정재원별님 06-28 7995 0
62 RomeLa 로봇개발 영상 +3 정재원별님 06-22 6773 0
61 [자작세상] API- AstroClock Ver2.0 +2 정재원별님 06-20 6722 0
60 [자작세상] API- AstroClock Ver1.5 +3 정재원별님 06-19 5819 0
59 [자작세상] API- 아날로그 시계 프로그래밍 Ver1 +3 정재원별님 06-15 8143 0
58 DVD RW로 레이저포인터 만들기 +8 정재원별님 04-18 10682 0
57 GPS모듈에서 데이터 받아오기 성공~! +6 정재원별님 02-24 16677 0
56 혼자서 여행갔다온거 동영상 편집 해봤습니… +4 정재원별님 02-14 7212 0
55 태양광 충전기 +1 박원우별님 02-02 6634 0
54 자작 망원경에 필요한 렌즈 구입 요령은? +3 박원우별님 01-22 7072 1
53 배터리가 필요없는 라디오 +3 박원우별님 01-14 10816 0
52 홈메이드 자작망원경의 한계는 어디까지? +2 박원우별님 01-14 6309 0
처음  1  2  3  4  5  6  7  8  맨끝
 
Since 2001.2.7 과학기술정보통신부 등록 비영리민간단체 천문노트. Copyright All rights reserved.
단체명 : 천문노트  |    고유번호 : 101-82-15888  |    대표자명 : 김태욱, 조우성  |    주소 : 138-804 서울특별시 송파구 가락동 93 금강빌딩 7층 710호  |    전화 : 02-543-3295  |    Fax : 02-6918-6888  |    통신판매신고번호 : 종로 제01-5696호  |    개인정보관리책임자 및 사이트관리자 : 지용호