青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

將游戲手柄操作映射為鼠標操作

/*
JoyToMouse.c

Copyright (C) 2011, coreBugZJ, all rights reserved.

版本:
1.0.0

功能:
將游戲手柄操作映射為鼠標操作。

原理:
接收手柄消息,然后產生相應鼠標消息。

使用:
方向鍵移動(會自動加速);
鍵 1 <==> 左鍵;
鍵 2 <==> 右鍵;

鍵 3 <==> 調整靈敏度,增加;
鍵 4 <==> 調整靈敏度,減小。

*/


#include <Windows.h>
#include <MMSystem.h>


#pragma comment( lib, "winmm.lib" )


        /* 每 ELAPSE 毫秒檢測手柄輸入 */
#define  ELAPSE    17

        /* 速度     mickeys / ELAPSE */
INT  BASE_VX = 4;
INT  BASE_VY = 4;
        /* 加速度   mickeys / ELAPSE / ELAPSE */
INT  ACCEL_VX   = 8;
INT  ACCEL_VY   = 8;
        /* 加加速度 mickeys / ELAPSE / ELAPSE / ELAPSE */
#define  ACCEL_ACCEL_VX    1
#define  ACCEL_ACCEL_VY    1
        /* 方向標志 */
#define  MASK_LEFT      ((DWORD)1)
#define  MASK_RIGHT     ((DWORD)2)
#define  MASK_UP        ((DWORD)4)
#define  MASK_DOWN      ((DWORD)8)


TCHAR gClassName[] = TEXT("JoyToMouse");
TCHAR gWndName[]   = TEXT("JoyToMouse -- coreBugZJ");


VOID msgOut( HWND hWnd, TCHAR msg[], UINT msglen ) {
        HDC hdc = GetDC( hWnd );
        TextOut( hdc, 50, 20, msg, msglen );
        ReleaseDC( hWnd, hdc );

        /* MessageBox( NULL, msg, msg, MB_OK ); */
}


LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
        static JOYINFO  ji1;
        static DWORD    id1 = 0xFFFF;
        static JOYCAPS  jc1;
        static DWORD    numDev;
        static DWORD    jxm1, jxl1, jxr1, jym1, jyt1, jyb1, x1, y1;
        static DWORD    dirMask = 0;
        static INT      vx = 0, vy = 0;

        INT      dx, dy;
        DWORD    bf;

        switch ( uMsg ) {
        case WM_CREATE :
                SetTimer( hWnd, 1, ELAPSE, NULL );

                if ( 0 == (numDev = joyGetNumDevs()) ) {
                        MessageBox( hWnd, TEXT("0 == joyGetNumDevs()\n\n請檢查手柄是否插好"), TEXT("Error"), MB_OK | MB_ICONERROR );
                        SendMessage( hWnd, WM_DESTROY, 0, 0 );
                        return 0;
                }

                // 手柄 1
                if ( JOYERR_NOERROR != joyGetPos( JOYSTICKID1, &ji1 ) ) {
                        MessageBox( hWnd, TEXT("JOYERR_NOERROR != joyGetPos()\n\n請檢查手柄是否插好"), TEXT("Error"), MB_OK | MB_ICONERROR );
                        SendMessage( hWnd, WM_DESTROY, 0, 0 );
                        return 0;
                }
                if ( JOYERR_NOERROR != joyGetDevCaps( JOYSTICKID1, &jc1, sizeof(jc1) ) ) {
                        MessageBox( hWnd, TEXT("JOYERR_NOERROR != joyGetDevCaps()\n\n請檢查手柄是否插好"), TEXT("Error"), MB_OK | MB_ICONERROR );
                        SendMessage( hWnd, WM_DESTROY, 0, 0 );
                        return 0;
                }
                id1  = JOYSTICKID1;
                jxm1 = ( jc1.wXmin + jc1.wXmax ) / 2;
                jxl1 = ( jc1.wXmin + jxm1 ) / 2;
                jxr1 = ( jc1.wXmax + jxm1 ) / 2;
                jym1 = ( jc1.wYmin + jc1.wYmax ) / 2;
                jyt1 = ( jc1.wYmin + jym1 ) / 2;
                jyb1 = ( jc1.wYmax + jym1 ) / 2;
                x1   = jxm1;
                y1   = jym1;
                joySetCapture( hWnd, id1, ELAPSE, TRUE );
                return 0;

        case WM_TIMER :
                if ( 0 == dirMask ) {
                        return 0;
                }

                dx = dy = 0;
                if ( dirMask & MASK_LEFT ) {
                        vx += ACCEL_VX;
                        dx  = -vx;
                }
                if ( dirMask & MASK_RIGHT ) {
                        vx += ACCEL_VX;
                        dx  = vx;
                }
                if ( dirMask & MASK_UP ) {
                        vy += ACCEL_VY;
                        dy  = -vy;
                }
                if ( dirMask & MASK_DOWN ) {
                        vy += ACCEL_VY;
                        dy  = vy;
                }

                msgOut( hWnd, TEXT("MOVE         "), 12 );
                mouse_event( MOUSEEVENTF_MOVE, dx, dy, 0, 0 );
                return 0;

        case MM_JOY1MOVE :
                dirMask = 0;
                x1 = LOWORD(lParam);
                y1 = HIWORD(lParam);
                if ( x1 < jxl1 ) {
                        dirMask |= MASK_LEFT;
                        vx = BASE_VX;
                        msgOut( hWnd, TEXT("LEFT1 DOWN   "), 12 );
                }
                if ( x1 > jxr1 ) {
                        dirMask |= MASK_RIGHT;
                        vx = BASE_VX;
                        msgOut( hWnd, TEXT("RIGHT1 DOWN  "), 12 );
                }
                if ( y1 < jyt1 ) {
                        dirMask |= MASK_UP;
                        vy = BASE_VY;
                        msgOut( hWnd, TEXT("UP1 DOWN     "), 12 );
                }
                if ( y1 > jyb1 ) {
                        dirMask |= MASK_DOWN;
                        vy = BASE_VY;
                        msgOut( hWnd, TEXT("DOWN1 DOWN   "), 12 );
                }
                return 0;

        case MM_JOY1BUTTONDOWN :
                bf = wParam;
                if ( (bf & JOY_BUTTON1CHG) && (bf & JOY_BUTTON1) ) {
                        mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
                        msgOut( hWnd, TEXT("BTN11 DOWN   "), 12 );
                }
                if ( (bf & JOY_BUTTON2CHG) && (bf & JOY_BUTTON2) ) {
                        mouse_event( MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0 );
                        msgOut( hWnd, TEXT("BTN12 DOWN   "), 12 );
                }
                if ( (bf & JOY_BUTTON3CHG) && (bf & JOY_BUTTON3) ) {
                        ACCEL_VX += ACCEL_ACCEL_VX;
                        ACCEL_VY += ACCEL_ACCEL_VY;
                        BASE_VX  += ACCEL_VX;
                        BASE_VY  += ACCEL_VY;
                        msgOut( hWnd, TEXT("BTN13 DOWN   "), 12 );
                }
                if ( (bf & JOY_BUTTON4CHG) && (bf & JOY_BUTTON4) ) {
                        BASE_VX  -= ACCEL_VX;
                        BASE_VY  -= ACCEL_VY;
                        if ( BASE_VX < 1 ) {
                                BASE_VX = 1;
                        }
                        if ( BASE_VY < 1 ) {
                                BASE_VY = 1;
                        }
                        ACCEL_VX -= ACCEL_ACCEL_VX;
                        ACCEL_VY -= ACCEL_ACCEL_VY;
                        if ( ACCEL_VX < 0 ) {
                                ACCEL_VX = 0;
                        }
                        if ( ACCEL_VY < 0 ) {
                                ACCEL_VY = 0;
                        }
                        msgOut( hWnd, TEXT("BTN14 DWON   "), 12 );
                }
                return 0;

        case MM_JOY1BUTTONUP :
                bf = wParam;
                if ( (bf & JOY_BUTTON1CHG) && (0 == (bf & JOY_BUTTON1)) ) {
                        mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );
                        msgOut( hWnd, TEXT("BTN11 UP     "), 12 );
                }
                if ( (bf & JOY_BUTTON2CHG) && (0 == (bf & JOY_BUTTON2)) ) {
                        mouse_event( MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 );
                        msgOut( hWnd, TEXT("BTN12 UP     "), 12 );
                }
                if ( (bf & JOY_BUTTON3CHG) && (0 == (bf & JOY_BUTTON3)) ) {
                        msgOut( hWnd, TEXT("BTN13 UP    "), 12 );
                }
                if ( (bf & JOY_BUTTON4CHG) && (0 == (bf & JOY_BUTTON4)) ) {
                        msgOut( hWnd, TEXT("BTN14 UP     "), 12 );
                }
                return 0;

        case WM_DESTROY :
                KillTimer( hWnd, 1 );
                if ( JOYSTICKID1 == id1 ) {
                        joyReleaseCapture( id1 );
                }
                PostQuitMessage( 0 );
                return 0;
        }

        return DefWindowProc( hWnd, uMsg, wParam, lParam );
}


INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmd, INT nShow ) {
        WNDCLASSEX  wc;
        HWND        hWnd;
        MSG         msg;

        wc.cbClsExtra    = 0;
        wc.cbSize        = sizeof(wc);
        wc.cbWndExtra    = 0;
        wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
        wc.hCursor       = LoadCursor( NULL, IDC_ARROW );
        wc.hIcon         = LoadIcon( NULL, IDI_APPLICATION );
        wc.hIconSm       = LoadIcon( NULL, IDI_APPLICATION );
        wc.hInstance     = hInst;
        wc.lpfnWndProc   = WndProc;
        wc.lpszClassName = gClassName;
        wc.lpszMenuName  = NULL;
        wc.style         = 0;

        if ( 0 == RegisterClassEx( &wc ) ) {
                MessageBox( NULL, TEXT("RegisterClassEx Failed!"), TEXT("Error"), MB_OK | MB_ICONERROR );
                return 0;
        }

        hWnd = CreateWindowEx( 0,
                gClassName, gWndName,
                WS_OVERLAPPEDWINDOW,
                200, 200, 400, 100,
                NULL, NULL,
                hInst, NULL );
        if ( NULL == hWnd ) {
                MessageBox( NULL, TEXT("CreateWindowEx Failed!"), TEXT("Error"), MB_OK | MB_ICONERROR );
                return 0;
        }
        ShowWindow( hWnd, nShow );
        UpdateWindow( hWnd );

        while ( GetMessage( &msg, NULL, 0, 0 ) ) {
                TranslateMessage( &msg );
                DispatchMessage( &msg );
        }
        return msg.wParam;
}

posted on 2011-12-31 16:41 coreBugZJ 閱讀(2332) 評論(0)  編輯 收藏 引用 所屬分類: 娛樂

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品永久在线| 一本不卡影院| 欧美国内亚洲| 欧美激情欧美激情在线五月| 久久精品国产精品亚洲综合| 国产欧美日韩免费| 亚洲美女91| 一本色道久久综合亚洲精品小说| 亚洲麻豆视频| 亚洲一区二区三区午夜| 欧美在线精品免播放器视频| 久久精品观看| 欧美精品久久一区| 国产精品乱码| 怡红院精品视频| 日韩一区二区精品| 亚洲欧美日本在线| 老司机一区二区三区| 欧美va亚洲va国产综合| 亚洲精品久久| 亚洲伦伦在线| 欧美一区二区三区在线| 欧美承认网站| 国产亚洲精品一区二区| 亚洲三级视频在线观看| 午夜精品在线观看| 亚洲国产精品久久精品怡红院| 欧美www视频在线观看| 9人人澡人人爽人人精品| 欧美亚洲综合久久| 欧美精品一区在线发布| 国产欧美三级| 日韩午夜中文字幕| 久久久久久综合网天天| 99re热精品| 免费在线亚洲| 国内成人精品2018免费看 | 国产日韩欧美成人| 亚洲美女视频| 欧美a级理论片| 午夜宅男欧美| 国产精品久久久久一区二区三区共| 亚洲国产精品激情在线观看| 欧美亚洲免费电影| 一区二区激情视频| 一区二区欧美在线观看| 欧美精品一区三区在线观看| 亚洲福利电影| 欧美jizzhd精品欧美喷水| 欧美专区日韩专区| 国产美女精品免费电影| 亚洲综合大片69999| 亚洲欧洲日产国产网站| 免费美女久久99| 精品福利免费观看| 久久综合一区二区三区| 久久成人免费网| 国产婷婷成人久久av免费高清| 亚洲女人av| 亚洲婷婷国产精品电影人久久| 欧美日韩一区二区三区四区在线观看 | 亚洲精品国产精品乱码不99| 久久久久久久国产| 亚洲欧美日韩区| 国产欧美69| 久久成人人人人精品欧| 午夜久久久久| 国内精品久久久久伊人av| 久久久99国产精品免费| 欧美一区二区在线| 禁久久精品乱码| 欧美电影在线观看完整版| 美女网站在线免费欧美精品| 亚洲国产精品一区| 亚洲激情一区二区| 欧美视频网站| 久久国产日韩| 免费h精品视频在线播放| 亚洲精品久久| 亚洲天堂黄色| 一区视频在线播放| 亚洲激情视频网站| 国产精品极品美女粉嫩高清在线| 小黄鸭精品密入口导航| 久久久久高清| 亚洲校园激情| 久久久久久久综合日本| 妖精视频成人观看www| 亚洲制服少妇| 91久久久精品| 亚洲欧美国产毛片在线| 亚洲激情校园春色| 亚洲小说欧美另类社区| 尤物在线观看一区| 在线综合亚洲欧美在线视频| 国内精品视频在线播放| 亚洲欧洲在线视频| 国产主播精品| 正在播放亚洲| 亚洲人午夜精品免费| 午夜激情久久久| 一级日韩一区在线观看| 欧美在线视频一区二区三区| 艳女tv在线观看国产一区| 久久久不卡网国产精品一区| 亚洲午夜久久久久久久久电影网| 久久激情视频久久| 亚洲免费在线精品一区| 欧美激情aⅴ一区二区三区| 欧美主播一区二区三区| 欧美精品福利在线| 欧美不卡三区| 国产亚洲欧洲一区高清在线观看| 亚洲日本一区二区三区| 在线看片成人| 午夜精品99久久免费| 亚洲午夜一区二区三区| 欧美黑人国产人伦爽爽爽| 免费在线观看精品| 国内自拍视频一区二区三区| 久久综合999| 99re6这里只有精品| 一区二区三区在线免费视频| 亚洲视频在线看| 亚洲美女电影在线| 蜜桃av综合| 欧美不卡视频一区| 狠狠色综合网站久久久久久久| 一区二区三区高清| 9色porny自拍视频一区二区| 免费一级欧美片在线播放| 久久只精品国产| 黑人巨大精品欧美一区二区小视频| 亚洲一区二区免费| 欧美有码在线观看视频| 国产精品一区二区女厕厕| 亚洲一级在线观看| 欧美一二三视频| 国产日韩精品久久| 先锋影音一区二区三区| 久久久青草婷婷精品综合日韩| 国产一区二区按摩在线观看| 久久国产直播| 欧美1区2区视频| 亚洲人成在线观看网站高清| 蜜臀91精品一区二区三区| 亚洲国产精品一区二区第一页| 亚洲欧洲一区| 欧美日韩在线三区| 亚洲欧美网站| 免费成人毛片| 亚洲免费观看高清在线观看 | 黄色欧美成人| 久久天堂成人| 亚洲精品美女在线观看| 亚洲欧美国产日韩中文字幕| 国产欧美日韩| 免费久久99精品国产自在现线| 亚洲精品免费在线播放| 亚洲欧美另类在线| 国内自拍一区| 欧美日韩成人在线播放| 午夜精品久久久久久久99水蜜桃 | 欧美精品1区2区3区| 在线亚洲美日韩| 久久在线免费| 亚洲一区二区三区四区五区黄| 国产欧美日韩亚州综合| 老色鬼久久亚洲一区二区| 亚洲激情在线观看| 久久激情网站| 一区二区三区日韩欧美| 国内精品久久久久影院色| 欧美激情综合五月色丁香小说 | 9久re热视频在线精品| 久久久视频精品| 亚洲深夜福利在线| 一区二区三区中文在线观看 | 亚洲国产精品尤物yw在线观看| 一本大道久久a久久综合婷婷| 国产精品美女久久久久久2018 | 一本一本久久| 欧美成人免费全部观看天天性色| 99亚洲一区二区| 伊人成年综合电影网| 国产精品久久激情| 欧美国产91| 久久色在线播放| 亚洲影院一区| 亚洲另类一区二区| 欧美高清免费| 久久午夜国产精品| 午夜日韩视频| 亚洲视频电影图片偷拍一区| 在线精品亚洲一区二区| 国产欧美91| 国产精品一二三视频| 欧美日韩亚洲系列| 欧美另类亚洲| 欧美激情第1页|