GET_X_LPARAMGET_Y_LPARAM 是宏定义,用于从 LPARAM 参数中提取鼠标事件的 X 和 Y 坐标。实际上,在 Windows 消息处理函数中,lParam 参数的低 16 位表示 X 坐标,高 16 位表示 Y 坐标。因此,你可以使用以下代码来获取鼠标事件的坐标:

case WM_MOUSEMOVE: {
    int xPos = GET_X_LPARAM(lParam);
    int yPos = GET_Y_LPARAM(lParam);

    // 遍历所有控件绘制数据,更新鼠标悬停状态并重绘控件
    for (auto& data : controlsData) {
        data.isHovered = PtInRect(&data.rect, {xPos, yPos});
    }
    InvalidateRect(hwndDlg, NULL, FALSE);
    return TRUE;
}

case WM_LBUTTONDOWN: {
    int xPos = GET_X_LPARAM(lParam);
    int yPos = GET_Y_LPARAM(lParam);

    // 遍历所有控件绘制数据,更新鼠标按下状态并重绘控件
    for (auto& data : controlsData) {
        if (PtInRect(&data.rect, {xPos, yPos})) {
            data.isPressed = true;
            SetCapture(hwndDlg);
        }
    }
    InvalidateRect(hwndDlg, NULL, FALSE);
    return TRUE;
}

case WM_LBUTTONUP: {
    // 遍历所有控件绘制数据,更新鼠标按下状态并重绘控件
    for (auto& data : controlsData) {
        if (data.isPressed) {
            data.isPressed = false;
            ReleaseCapture();
        }
    }
    InvalidateRect(hwndDlg, NULL, FALSE);
    return TRUE;
}

使用上述代码替换之前的代码中的对应部分即可。

非常抱歉给你带来的困扰,希望这次的回答能够帮助到你。如果还有其他问题,请随时提问。

如何从 LPARAM 中提取鼠标事件的 X 和 Y 坐标

原文地址: https://www.cveoy.top/t/topic/UZf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录