c++ - "Click-through"GLFW窗口?

标签 c++ linux opengl overlay glfw

我在正确设置我的 glfw 覆盖层时遇到了一点问题,我已经成功创建了一个具有透明背景的 glfw 窗口,现在我想让窗口也“点击”,这样我就可以访问它后面的窗口并让它像一个叠加层一样。

遗憾的是,我无法弄清楚如何在 glfw 中执行此操作,我当前用于初始化窗口的代码如下所示:

Width = 3440;
Height = 1440;
/* GLFW */
if (!glfwInit()) {
    fprintf(stdout, "[GLFW] failed to init!\n");
    exit(1);
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_DECORATED, GLFW_FALSE);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
glfwWindowHint(GLFW_FOCUSED, GLFW_FALSE);
glfwWindowHint(GLFW_FOCUS_ON_SHOW, GLFW_FALSE);

/*Topmost and see through*/
glfwWindowHint(GLFW_FLOATING, GLFW_TRUE);
glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE);

glfwSwapInterval(1);
Window = glfwCreateWindow(Width, Height, "Overlay", 0, 0);
glfwMakeContextCurrent(Window);

我还尝试使用 glfw3_native.h 给定 glfwGetX11Window 函数并尝试做类似

void Render::MakeClickable(bool State){
    auto X11Window = glfwGetX11Window(Window);
    if(State){

    }else{
        XserverRegion region = XFixesCreateRegion (MainDisplay, NULL, 0);
        XFixesSetWindowShapeRegion (MainDisplay, X11Window, ShapeInput, 0, 0, region);
        XFixesDestroyRegion (MainDisplay, region);
    }
}

但这没有用:/

如何正确设置我的窗口以忽略我的点击并让它传递到后面的窗口,以便我可以将其用作叠加层?

最佳答案

新窗口提示 GLFW_MOUSE_PASSTHROUGH 已添加到 GLFW recently启用此功能。

你可以这样使用它:

glfwWindowHint(GLFW_MOUSE_PASSTHROUGH, GLFW_TRUE);

关于c++ - "Click-through"GLFW窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61488266/

相关文章:

c++ - 名称修改和转储

c++ - 如何将类中的公共(public)函数作为另一个函数的参数传递。

c++ - 如何对依赖 Asio 的一段代码进行单元测试?

c - 如何确定存储类型(SSD 驱动器或 HHD .mechanical 驱动器),使用 C 语言

c++ - OpenGL概念题

linux - OpenGL glutSwapBuffers 不绘制场景

c++ - 三向比较运算符总是有效的吗?

c++ - 延迟共享库的链接

c - 使用 UUID 的唯一文件名

c++ - 用于 GLSL 图像处理的小型 C/C++ 库?