您的位置: 旅游網 > 影視 >> 電影節

    中對鼠標的確定及簡單控制呢

    發布時間:2021-10-28 05:38:33

    前幾天看一友關于 按鍵精靈 的討論。 其實質是控制鼠標進行模仿動作。現給出主要實現代碼及工作結構。但僅適合Win32編程初學者,高手就不用進了。

    LRESULT APIENTRY WndProc(HWND, UINT, WPARAM, LPARAM); //窗口函數

    BOOL ckzc(HINSTANCE); //注冊窗口類函數

    BOOL ckcj(HINSTANCE, int); //創建窗口函數

    HINSTANCE hInst; //當前句柄

    HWND hWndMain; //窗口句柄

    上面首先是window窗口函數聲明。然后依照慣例注冊窗口類函數和創建窗口函數。通過關鍵字HINSTANCE、HWND分別獲得當前句柄、窗口句柄。

    BOOL ckzc(HINSTANCE hInstance)

    {

    WNDCLASSEX wcexMouse;

    Size = sizeof(WNDCLASSEX);

    yle = CS_DBLCLKS; //支持鼠標雙擊

    fnWndProc = (WNDPROC)MainWndProc;

    ClsExtra = 0;

    WndExtra = 0;

    nstance = hInstance;

    con = LoadIcon(NULL,IDI_WINLOGO);

    ursor = LoadCursor(NULL,IDC_ARROW);

    rBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);

    szMenuName = NULL;

    szClassName = \"MouseWClass\";

    conSm = LoadIcon(NULL,IDI_WINLOGO);

    //為了保證程序WIN98/NT的兼容性和可移植性,用以下對窗口進行注冊

    if (!RegisterClassEx (wcexMouse))

    {

    if (!RegisterClass((LPWNDCLASS)yle))

    MessageBox (NULL, TEXT (\"注冊窗口類失敗!\"), \"wcexMouse\", MB_ICONERROR);

    return (FALSE);

    }

    return (TRUE);

    }

    進行window類注冊。

    BOOL ckcj(HINSTANCE hInstance,int nCmdShow)

    {

    hInst = hInstance;

    hWndMain = CreateWindow(\"MouseWClass\",

    \"我的鼠標---cnscom\",

    WS_OVERLAPPEDWINDOW,

    CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

    他們還向受災較重的寶興縣緊急籌措帳篷、大米、礦泉水等急需物資 NULL,NULL,hInstance,NULL);

    if(!hWndMain)

    return (FALSE);

    ShowWindow(hWndMain,nCmdShow); //顯示窗口

    UpdateWindow(hWndMain); //刷新窗口

    return (TRUE);

    }

    窗口創建工作。

    int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,

    LPSTR lpCmdLine, int nCmdShow)

    {

    MSG msg;

    if(!ckzc(hInstance)) //注冊窗口類

    return (FALSE);

    if(!ckcj(hInstance,nCmdShow)) //創建窗口

    return (FALSE);

    InvalidateRect(hWndMain, NULL, TRUE); //按指定區域更新區域

    while(GetMessage(msg,NULL,0,0))

    {

    TranslateMessage(msg);

    DispatchMessage(msg);

    }

    return (aram);

    }

    一個窗口程序最重要的環節了。WinMain對以上我們建立的函數進行了總匯。

    LRESULT APIENTRY WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

    {

    HDC hDc, hMemDc;

    PAINTSTRUCT ps;

    DWORD fwKeys;

    POINT ptMouse;

    char szTitle[100];

    static RECT rect1, rect2;

    static HCURSOR hCursorPen;

    switch(message)

    {

    case WM_CREATE:

    ft = 90;

    ght = 170;

    p = 8;

    ttom = 68;

    ft = 90;

    ght = 170;

    p = 78;

    ttom = 138;

    hCursorPen = LoadCursor(hInst, \"RCCURSOR\");

    break;

    case WM_LBUTTONDOWN:

    case WM_RBUTTONDOWN:

    case WM_MOUSEMOVE:

    ptMouse.x = LOWORD(lParam); //取lParam低字節為橫坐標x

    ptMouse.y = HIWORD(lParam); //取lParam高字節為橫坐標y

    fwKeys = wParam; //將鼠標按鈕和鍵盤組合賦給32位無符號整數fwKeys

    //很喜歡各個游戲中很有特色的鼠標吧。下面的代碼就可以幫助你實現

    //判斷是否位于窗口之中否則,采用普通的箭頭鼠標。

    if (PtInRect(rect1, ptMouse) || PtInRect(rect2, ptMouse)) //判斷指定點是否在指定窗口內

    SetCursor(hCursorPen);

    //在標題欄上顯示鼠標的當前位置和按鍵和按鍵信息

    //把輸出格式和輸出變量送到szTitle數組

    wsprintf(szTitle, \"鼠標測試程序 ---- 鼠標位置:[%d,%d]\", ptMouse.x, ptMouse.y);

    if (fwKeys!=0)

    {

    //把指定的內容輸出到szTitle數組中

    lstrcat(szTitle, \" ---- 您按下了\");

    if(fwKeys MK_CONTROL)

    lstrcat(szTitle, \"Ctrl \");

    if(fwKeys MK_SHIFT)

    lstrcat(szTitle, \"Shift \");

    if(fwKeys MK_LBUTTON)

    lstrcat(szTitle, \"鼠標左按鈕\");

    if(fwKeys MK_RBUTTON)

    lstrcat(szTitle, \"鼠標右按鈕\");

    lstrcat(szTitle, \"鍵\");

    }

    SetWindowText(hWnd, szTitle);

    break;

    case WM_LBUTTONDBLCLK:

    case WM_RBUTTONDBLCLK:

    //如果鼠標雙擊了窗口客戶區,那么就顯示坐標信息

    hDc = GetDC(hWnd);

    //設置輸出字體顏色

    SetTextColor(hDc, (message == WM_LBUTTONDBLCLK) ? RGB(255, 0, 0) : RGB(0, 0, 255));

    wsprintf(szTitle, \"(%d,%d)\", LOWORD(lParam), HIWORD(lParam));

    TextOut(hDc, LOWORD(lParam), HIWORD(lParam), szTitle, lstrlen(szTitle)); //在指定位置輸出文本

    ReleaseDC(hWnd, hDc);

    break;

    case WM_PAINT:

    hDc = BeginPaint(hWnd, ps);

    hMemDc = CreateCompatibleDC(hDc);

    SelectObject(hMemDc, hSun);

    BitBlt(hDc, 90, 8, 80, 60, hMemDc, 0, 0, SRCCOPY);

    DeleteDC(hMemDc);

    hMemDc = CreateCompatibleDC(hDc);

    SelectObject(hMemDc, hMoon);

    BitBlt(hDc, 90, 78, 80, 60, hMemDc, 0, 0, SRCCOPY);

    DeleteDC(hMemDc);

    EndPaint(hWnd, ps);

    break;

    case WM_DESTROY:

    DeleteObject(hSun);

    DeleteObject(hMoon);

    PostQuitMessage(0);

    break;

    default:

    return (DefWindowProc(hWnd, message, wParam, lParam));

    }

    return (0);

    }

    以上是我們全文之重點。。主要的對鼠標的操作。注釋很完全,不多羅嗦了。查看本文來源

    蘭州好白癜風醫院
    揚州白癜風哪里治療好
    成都哪婦科醫院好
    猜你會喜歡的
    猜你會喜歡的
    主站蜘蛛池模板: 欧美日韩不卡中文字幕在线| 六月丁香综合网| 亚洲精品国产精品国自产观看| 国产一区二区精品久久| 国产免费人成视频在线观看| 四虎免费影院4hu永久免费| 99热这里有精品| 无限韩国视频免费播放| 亚洲免费观看网站| 男女乱婬真视频| 国产乱妇乱子在线视频| 亚洲午夜精品久久久久久人妖| 美国式禁忌在线播放| 国产无人区一区二区三区| 99精品中文字幕| 成人精品一区二区三区电影| 亚洲91精品麻豆国产系列在线| 特大巨黑吊av在线播放| 国产97人人超碰caoprom| 久草视频精品在线| 国内精品久久久久久久97牛牛| 下樱桃视频入口在线观看| 日韩在线高清视频| 亚洲国产美女精品久久| 男孩子和男孩子做到哭泰国 | 亚洲va欧美va国产综合| 洗澡与老太风流69小说| 动漫人物桶动漫人物免费观看| 莲花宝鉴无删减电影在线看| 国产欧美一区二区三区视频在线观看| 91精品欧美激情在线播放| 寂寞山村恋瘦子的床全在线阅读 | 久久久国产精品四虎| 欧洲无码一区二区三区在线观看| 亚洲精品韩国美女在线| 精品久久亚洲一级α| 国产99精华液| 里番牝教师~淫辱yy608| 国产成人综合久久精品下载| 1000部拍拍拍18勿入免费凤凰福利 | 人人玩人人添人人澡mp4|