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

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精品二区三区| 久久黄色影院| 久久免费午夜影院| 欧美电影电视剧在线观看| 免费亚洲视频| 欧美精品日韩一区| 欧美日韩一级黄| 欧美性理论片在线观看片免费| 欧美日韩一区二区在线| 国产精品hd| 国产精品一卡二卡| av不卡在线看| 在线视频欧美日韩| 午夜精品www| 久久久久久久综合色一本| 老牛嫩草一区二区三区日本| 六月丁香综合| 国产精品sm| 国语自产精品视频在线看一大j8 | 欧美日韩久久不卡| 一区二区三区在线观看视频| 国产一区二区三区不卡在线观看| 国内精品免费午夜毛片| 亚洲电影免费观看高清| 中文国产成人精品久久一| 久久精品99国产精品日本| 欧美电影免费观看网站| 日韩午夜在线视频| 久久久久久久精| 欧美极品aⅴ影院| 久久人人看视频| 亚洲人成欧美中文字幕| 亚洲精品一线二线三线无人区| 一本色道久久精品| 久久久久久自在自线| 欧美日韩一区二区三区| 亚洲第一毛片| 欧美影院午夜播放| 亚洲精品一区二区三| 久久久久国产精品午夜一区| 国产精品高潮呻吟久久av黑人| 亚洲国产高清一区| 久久爱另类一区二区小说| 日韩视频免费观看| 欧美r片在线| 黄色亚洲免费| 欧美在线3区| 在线亚洲激情| 欧美日韩播放| 国产精品五月天| 在线播放国产一区中文字幕剧情欧美 | 一区二区免费在线观看| 久久久久久夜| 亚洲欧美经典视频| 国产精品免费在线| 欧美在线精品免播放器视频| 欧美久久综合| 日韩亚洲综合在线| 91久久综合亚洲鲁鲁五月天| 免费高清在线视频一区·| 激情丁香综合| 久久精品亚洲一区二区| 亚洲国产天堂久久综合网| 亚洲欧洲一二三| 久久久国产亚洲精品| 国产欧美一区视频| 新67194成人永久网站| 亚洲夜晚福利在线观看| 国产精品黄色在线观看| 亚洲欧美日韩另类精品一区二区三区| 亚洲国产高清一区二区三区| 蜜桃视频一区| 亚洲精品一二三| 日韩视频在线观看一区二区| 欧美日韩中文字幕| 亚洲欧美精品伊人久久| 亚洲永久免费观看| 国产一区观看| 欧美成熟视频| 欧美风情在线观看| 亚洲视频免费在线| 午夜精品免费| 亚洲国产综合在线看不卡| 亚洲欧洲视频在线| 国产欧美精品日韩区二区麻豆天美| 久久精品123| 欧美 日韩 国产精品免费观看| 99视频有精品| 午夜免费久久久久| 亚洲欧洲精品成人久久奇米网| 亚洲另类视频| 好吊日精品视频| 亚洲毛片网站| 韩国成人精品a∨在线观看| 亚洲高清一区二| 国产精品一国产精品k频道56| 久热精品视频| 欧美色综合天天久久综合精品| 久久久久国产精品麻豆ai换脸| 欧美成人四级电影| 欧美一区二视频| 久久综合精品国产一区二区三区| av不卡在线| 久久久久久色| 亚洲自拍偷拍福利| 欧美a级大片| 欧美一区二区三区啪啪| 欧美电影专区| 欧美一区三区二区在线观看| 欧美成人精品1314www| 久久gogo国模裸体人体| 欧美日韩18| 欧美激情2020午夜免费观看| 国产欧美短视频| 一二三区精品| 日韩一级精品| 免费在线亚洲欧美| 久久久精品国产一区二区三区| 欧美日韩国产片| 亚洲高清网站| 亚洲国产精品小视频| 欧美在线视频在线播放完整版免费观看 | 午夜精品影院| 亚洲精品中文在线| 久久久国产亚洲精品| 新狼窝色av性久久久久久| 欧美精彩视频一区二区三区| 美女久久一区| 国产午夜精品一区理论片飘花| 亚洲精品四区| 亚洲久久一区| 欧美不卡高清| 欧美国产一区视频在线观看| 韩日视频一区| 久久精品色图| 蜜桃av综合| 又紧又大又爽精品一区二区| 欧美在线视频一区二区| 久久国产精品久久w女人spa| 国产精品亚洲欧美| 亚洲主播在线观看| 久久av在线看| 国际精品欧美精品| 久久精品亚洲一区二区| 久久久久综合网| 国产一区二区三区在线观看精品 | 亚洲高清在线| 亚洲精品在线免费| 欧美欧美在线| 一区二区三区视频在线| 午夜精品一区二区三区在线视| 国产精品日韩精品| 翔田千里一区二区| 久久午夜av| 亚洲福利视频免费观看| 女人香蕉久久**毛片精品| 亚洲精品三级| 亚洲一二三级电影| 国产欧美日韩视频一区二区三区| 午夜视频一区在线观看| 老司机午夜精品视频在线观看| 亚洲电影在线免费观看| 欧美成人精品一区| 中文精品在线| 久久久久在线观看| 亚洲精品黄色| 国产精品亚洲网站| 美女视频网站黄色亚洲| 日韩亚洲精品在线| 久久精品国产免费观看| 亚洲国产你懂的| 国产精品高清网站| 久久天堂成人| 亚洲天堂成人在线观看| 老司机精品福利视频| 在线天堂一区av电影| 国语自产精品视频在线看一大j8| 欧美福利网址| 欧美一级淫片播放口| 亚洲国产精品电影在线观看| 亚洲在线播放电影| 亚洲第一伊人| 国产精品综合不卡av| 欧美成人午夜剧场免费观看| 亚洲一区二区三区免费观看 | 香蕉免费一区二区三区在线观看| **网站欧美大片在线观看| 欧美黑人多人双交| 亚洲国产高清在线观看视频| 久久―日本道色综合久久| 久久精品人人做人人综合| 欧美成人精品影院| 中国亚洲黄色| 亚洲欧洲99久久| 亚洲精品欧美一区二区三区| 最新国产成人av网站网址麻豆 | 亚欧成人精品|