📜  C C++中鼠标编程的用例(1)

📅  最后修改于: 2023-12-03 15:13:44.786000             🧑  作者: Mango

C/C++ 中鼠标编程的用例

鼠标编程是指使用鼠标和图形用户界面(GUI)来在计算机上创建和操作软件应用程序。C/C++是一种面向过程的编程语言,通常使用命令行界面(CLI)进行编程。然而,使用C/C++编写GUI应用程序也是完全可行的,该应用程序可以使用鼠标进行操作。

下面将介绍C/C++中的鼠标编程用例,包括鼠标事件处理、窗口创建和更改光标形状等操作。

鼠标事件处理

当用户点击鼠标或将鼠标移动时,操作系统会生成鼠标事件。程序可以通过捕捉这些事件来响应用户的操作。在C/C++中,可以使用Windows API中的SetWindowsHookEx()函数来设置全局鼠标钩子,从而捕捉鼠标事件。具体实现可以参考下面的代码片段:

#include <Windows.h>

// 全局鼠标钩子回调函数,捕捉鼠标事件
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0 && (wParam == WM_LBUTTONDOWN || wParam == WM_RBUTTONDOWN || wParam == WM_MOUSEMOVE))
    {
        // TODO:处理鼠标按下或移动事件
    }

    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

// 设置全局鼠标钩子
void SetMouseHook()
{
    HHOOK hHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, NULL, 0);
    if (hHook == NULL)
    {
        // TODO:全局鼠标钩子设置失败
    }
}
窗口创建

使用Windows API,可以在C/C++中创建GUI窗口,并在窗口中添加按钮、标签等控件。具体实现可以参考下面的代码片段:

#include <Windows.h>

// 窗口消息处理函数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_PAINT:
        {
            // TODO:重绘窗口
            break;
        }

    case WM_DESTROY:
        {
            PostQuitMessage(0);
            break;
        }

    default:
        break;
    }

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

// 创建GUI窗口
void CreateWindow()
{
    HINSTANCE hInstance = GetModuleHandle(NULL);
    HWND hWnd = NULL;

    // 定义窗口类
    WNDCLASSEX wc = { 0 };
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.lpszClassName = L"MyWindowClass";

    // 注册窗口类
    if (!RegisterClassEx(&wc))
    {
        // TODO:窗口类注册失败
        return;
    }

    // 创建窗口
    hWnd = CreateWindowEx(
        0,
        L"MyWindowClass",
        L"My Window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        640, 480,
        NULL,
        NULL,
        hInstance,
        NULL);

    if (hWnd == NULL)
    {
        // TODO:窗口创建失败
        return;
    }

    ShowWindow(hWnd, SW_SHOWDEFAULT);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
更改光标形状

操作系统通常会提供多种光标形状,例如箭头、十字、等待等。在C/C++中,可以使用Windows API中的LoadCursor()函数来加载对应形状的光标,并使用SetCursor()函数将其应用于当前窗口。具体实现可以参考下面的代码片段:

#include <Windows.h>

// 更改光标形状
void ChangeCursorShape()
{
    HCURSOR hCursor = LoadCursor(NULL, IDC_WAIT);
    SetCursor(hCursor);
}

总之,C/C++中鼠标编程是可以实现的,并且可以在GUI应用程序中实现更为友好的用户交互。上面介绍的鼠标事件处理、窗口创建和更改光标形状等操作只是其中的一部分,实际应用中还可以实现更多的鼠标功能。