레이저마우스의 WHEEL_DELTA... :: 2007/12/04 11:52


제가 집에서 원래 사용하던 마우스는 마이크로소프트 익스플로러 3.0 버전 새로 나온 것 이었습니다. 마우스가 워낙 인기가 있다보니 단종됐다가도 다시 나오곤 하더군요. 좀 커서 손이 부담스러웠는데 쓰다보니 또 익숙해지고 그랬습니다. 그렇게 불편함 없이 사용하다 버튼이 고장나서 한 번만 클릭을해도 더블 클릭이 되는 현상이 발생하더군요. 억지로 참고 쓰다, 버튼 스왑해서 쓰다가 결국 그냥 마이크로소프트의 노트북용 무선 레이저 마우스로 교체했습니다.

마우스 감도도 좋고, 무선이니깐 편하기도 하고 좋았습니다. 그런데 왠걸 이 놈은 이상하게 휠이 자꾸 저의 의도처럼 움직이질 않더군요. 파폭이나, 탐색기같은데는 괜찮은데 소스 인사이트가 특히 이상하더군요. 한참을 휠을 돌려야 겨우 한 페이지 정도 올라가는게 아니겠습니까? 인터넷을 찾아봐도 관련 정보를 찾을 수가 없었습니다. 그러다 어제 소리통 코드를 짜다가 소리통의 재생 목록 스크롤도 소스 인사이트처럼 버벅 거린다는 사실을 알게 되었죠. 그리고 그 레이저 마우스의 심오함을 MSDN을 통해서 알게되었습니다. ㅋㅋ

일반적으로 휠 마우스가 날려주는 WM_MOUEWHEEL 메시지의 WPARAM에는 delta값이 넘어옵니다. 휠을 얼만큼 스크롤을 시켰냐하는 것이죠. 돌리는 방향은 양수, 음수로 계산합니다. 일반적으로 구형 마우스의 경우에는 이 값은 거의 변동 없이 WHEEL_DELTA의 배수로 넘어옵니다. WHEEL_DELTA가 120으로 정의되어 있기 때문에 +120, -120, +240 따위의 값으로 넘어오는 거죠. 그래서 보통은 휠 코드를 아래와 같이 많이 작성합니다.


lines는 한번 스크롤 시켰을 때 얼마씩 페이지를 넘길지를 정해둔 값 입니다. 보통 제어판에서 설정하도록 되어있습니다. 위 코드는 delta가 120이면 lines만큼, 240이면 2*lines만큼 스크롤을 시킵니다. 구형 마우스에서는 별 문제 없이 동작하죠. 왜냐하면 delta값이 항상 WHEEL_DELTA의 배수로 넘어오기 때문입니다.

하지만 제가 새로 장착한 그 레이저 마우스는 틀렸습니다. 친절하게도 사용자가 조금 휠을 돌리면 28따위의 작은 값을 보내주는게 아니겠습니까? 따라서 쌩하고 한바퀴를 돌리기 전까지 절때 delta값이 120이상 나오지 않고, 결국 WHEEL_DELTA로 나눈 값은 0이 되어서 스크롤이 안됐던 겁니다. 물론 MSDN에는 이것에 대해서 상세하게 코멘트가 되어 있었습니다. 사용자가 조금 돌린만큼 친절하게 알려주는 마우스들도 있기 때문에 그 값을 저장해서 WHEEL_DELTA만큼 됐을때 스크롤을 시키거나 아니면 부분 값으로 스크롤 시킬 수 있는 만큼 스크롤을 시키라고 되어 있더군요. 그래서 휠 코드를 아래와 같이 고쳤습니다.


특별한 건 없고, 값을 저장 시켜 두었다가 스크롤 시킬 수 있는 만큼이 되면 스크롤을 시켜줍니다. 이 코드로 변경하고 나니 스크롤이 정말 친절하게 잘 되더군요. 저의 의도대로 한줄씩 할 수도 있고, 한번에 팍팍 내려갈 수도 있었습니다. 이런 짓을 해보기 전까지는 그 레이저 마우스의 휠에 어떤 특별한 기능이 있다는 것을 알지 못했습니다. 그러나 이제는 그 마우스를 사용하면 한줄씩 스크롤을 할 수 있다는 사실을 알게되었죠. 노트북에서 사용하는 마우스도 바꾸어야 겠습니다. 한 번 편리함을 경험하고 난다음 돌아가기란 쉽지 않죠. 세 줄씩 휙휙 넘어가는 마우스의 불편함이란 ^^;;

XP에서의 WHEEL_DELTA
위의 내용은 모두 Vista에서 테스트했던 내용입니다. 집에있던 레이저 마우스를 회사에 들고와서 XP에서 테스트 해보았습니다. 그런데 도저히 컨트롤을 해도 한줄씩 스크롤을 할 수가 없더군요. 왜 그럴까 하다가 간단한 휠 테스트 프로그램을 만들어 보았습니다.

사용자 삽입 이미지

휠에 넘어오는 delta값을 출력해본 것 입니다. 죄다 120의 배수임을 알 수 있습니다. 어떻게 돌려도 무조건 120의 배수가 나오죠. 그렇다면 전용 드라이버를 설치하지 않아서 그런 것일까하는 생각에 시디를 뜯어서 인텔리 마우스 전용 드라이버를 설치해 주었습니다. 설치하고 나서도 결과는 별반 차이가 없더군요.

사용자 삽입 이미지

제어판에 마우스 등록 정보를 살펴봤습니다. 전용 드라이버답게 다양한 옵션이 추가되었더군요. 그 중에 하나가 위에서 보이는 가속 스크롤 기능입니다. 체크를 하고 테스트를 해보았습니다.

사용자 삽입 이미지

뭔가 120으로 떨어지지 않는 숫자가 많이 보이죠. 그런데 안타깝게도 120아래에 있는 숫자는 보질 못했습니다. 즉 아무리 조금 돌려도 XP에서는 기본 120은 먹고 들어가더군요. ㅠㅠ 결국은 한 줄씩 스크롤을 할 수 없다는 이야기 일까요? 하드웨어가 좋아도 운영체제가 구리면 기능을 다 사용하지 못하는 경우도 있나봅니다. ㅎㅎ


스폰서
글타래

  • 2주간 인기 글
  • 2주간 인기글이 없습니다.
Trackback Address :: http://jiniya.net/tt/trackback/667
  • Gravatar Image.
    키눅스 | 2007/12/03 13:13 | PERMALINK | EDIT/DEL | REPLY

    저랑 같은 마우스를 쓰시네요 ^^;
    다른데서는 다 괜찮은데.. 제가 RSS 리더로 연모를 사용하는데, 연모에서 휠 반응이 시원치 않더니..
    이런 심오한(?) 문제가 있었군요..

    • Gravatar Image.
      codewiz | 2007/12/04 11:54 | PERMALINK | EDIT/DEL

      의외로 저 마우스 쓰시는 분들 많은 것 같더라고요... ^^;;

    • Gravatar Image.
      rockenrollz | 2007/12/04 13:52 | PERMALINK | EDIT/DEL

      저도 저마우스를 사용중입니다.

      철판위에서 송수신감도가 극악으로 떨어지는 것을 제외하면 아주 잘 쓰고 있습니다. ^^;

  • Gravatar Image.
    Maro | 2007/12/03 13:36 | PERMALINK | EDIT/DEL | REPLY

    허허.. 역시 보통사람이 아니시군요 ㅋㅋ
    휠이 왜그런가 했더니 저거 때문이군요 -_-;;

    • Gravatar Image.
      codewiz | 2007/12/04 11:55 | PERMALINK | EDIT/DEL

      아닐수도 있어요. ㅎㅎ
      오늘 XP에서 테스트 해보니깐 일반 마우스랑 똑같이 나오드라고요. 가속 스크롤을 사용하지 않는 경우에는요...

  • Gravatar Image.
    구루마루 | 2007/12/03 13:52 | PERMALINK | EDIT/DEL | REPLY

    그게 원래는 고정값이었군요 *_*

    프로젝트에 마우스 휠 동작을 다른 키로 구현한게 있었는데 키를 누르니 값이 계속 바뀌어서 오히려 애 먹었던 적이 있지요.. ^^

  • Gravatar Image.
    환상경 | 2007/12/03 17:42 | PERMALINK | EDIT/DEL | REPLY

    보통사람(저같은)이라면 에띠 이 마우스 x구리네 하고 욕할텐데
    그 원리를 파헤치시다니 정말 대단하십니다. +_+

    • Gravatar Image.
      codewiz | 2007/12/04 11:56 | PERMALINK | EDIT/DEL

      저도 욕하고 사용하다가 우연찮게 알게됐어용... 알아낼려고 알아낸게 아니라는... ㅎㅎ 전 소스 인사이트 욕하면서 쓰고 있었죠. 다른데는 잘 되길래... ^^;;

  • Gravatar Image.
    kkamagui | 2007/12/03 21:45 | PERMALINK | EDIT/DEL | REPLY

    오~!! 휠에 이런 비밀이~!!
    휠 쪽 프로그래밍은 거의 해보지 않았는데, 다음에 참고해야겠군요. ^^ 감사합니다.

  • Gravatar Image.
    object | 2007/12/04 02:33 | PERMALINK | EDIT/DEL | REPLY

    MS 마우스의 최신 휠들은 딱딱 걸리는 느낌이 없어서 저렇게 작은 값이 날라오죠. 그래서 호환이 안 되는 프로그램이 제법 많습니다. 대표적으로 구글 피카사도 그래요 ㅠㅠ 보통 딱딱 걸리는 휠 한 단계를 다음 그림 넘기기 등으로 설정되어있는 프로그램들이 있는데 낭패죠. 이럴 땐 어쩔 수 없이 마우스 앞/뒤 버튼을 따로 매핑을 시킴으로써 해결했습니다. 저는 그 걸림없는 휠 매우 싫어합니다 ;;

    • Gravatar Image.
      codewiz | 2007/12/04 11:58 | PERMALINK | EDIT/DEL

      그렇군요. 의외로 그런 프로그램이 많나 봅니다. 전 한 줄씩 스크롤되서 좋아했는데 XP에서는 해보니깐 안되네용. ㅋㅋ 뭔가 다른 방법이 있는건지 모르겠습니다.

  • Gravatar Image.
    dohoons | 2007/12/08 19:29 | PERMALINK | EDIT/DEL | REPLY

    ms무선마우스 사용할때 한글2007에서 휠을 빠르게 돌리지 않으면 스크롤이 안됐거든요.
    이글을 보니 이해가 가네요.. 그것도 이 문제 같네요

  • Gravatar Image.
    BreathAir | 2007/12/10 11:37 | PERMALINK | EDIT/DEL | REPLY

    와~! 이런 문제가 있었군요.. 여기 들를때마다 신선하고 좋은 정보를 이렇게 제공해주시다니
    항상 감사할 따름입니다 ㅎㅎ ^^;

  • Gravatar Image.
    용퓌 | 2008/06/11 22:51 | PERMALINK | EDIT/DEL | REPLY

    이거 자세히좀 알수 있을까요??

    저도 마소 프리젠터 마우스 쓰는데...휠이 잘 안되서 큰일이네요...

    해결 방법좀,,,ㅜㅜ

    • Gravatar Image.
      codewiz | 2008/06/12 15:42 | PERMALINK | EDIT/DEL

      저도 해결방법을 찾아보진 않았는데요. 근본적인 글에 나타난 것처럼 대부분의 프로그램의 휠 코드가 조금씩 돌아가는 마우스를 고려하지 않고 작성되었다는 것이죠.

      해결하기 위해서는 조금씩 메시지를 보내지 않도록 옵션을 조정하거나 아니면 후킹을 해서 메시지를 씹고 있다가 배수가 될때마다 보내주는 방법이 있겠네욤. 그런데 그런 옵션이 있는지는 모르겠습니다. ㅋㅋ

      참고로 전 마우스를 다른 걸로 바꿨습니다 ㅋㅋㅋㅋ

Name
Password
Homepage
Secret
< PREV | 1| ... 81|82|83|84|85|86|87|88|89| ... 604| NEXT >