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 (将#修改为@)