微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SDL实现鼠标悬停透明控件在linux Xlib下不产生事件

如何解决SDL实现鼠标悬停透明控件在linux Xlib下不产生事件

忽略鼠标事件,对输入透明,窗口只是一个蒙版画布,从不响应任何键盘/鼠标事件,我如何在 SDL 中做到这一点?我在 Windows 中做过这个,但我不知道在 linux Xlib 中

int WIN_SetwindowOpacity(_THIS,SDL_Window * window,float opacity)
{
    const SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
    const HWND hwnd = data->hwnd;
    LONG style = getwindowlong(hwnd,GWL_EXSTYLE);

    if (window->flags & SDL_WINDOW_LOSE_FOCUS)
    {
        style |= WS_EX_TRANSPARENT; //implement here for windows
    }

    SDL_assert(style != 0);

    if (opacity == 1.0f) {
        /* want it fully opaque,just mark it unlayered if necessary. */
        if (style & WS_EX_layered) {
            if (SetwindowLong(hwnd,GWL_EXSTYLE,style & ~WS_EX_layered) == 0) {
                return WIN_SetError("SetwindowLong()");
            }
        }
    } else {
        const BYTE alpha = (BYTE) ((int) (opacity * 255.0f));
        /* want it transparent,mark it layered if necessary. */
        if ((style & WS_EX_layered) == 0) {
            if (SetwindowLong(hwnd,style | WS_EX_layered) == 0) {
                return WIN_SetError("SetwindowLong()");
            }
        }

        if (SetlayeredWindowAttributes(hwnd,alpha,LWA_ALPHA) == 0) {
            return WIN_SetError("SetlayeredWindowAttributes()");
        }
    }

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。