You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GLFW无边框全屏窗口光标意外隐藏问题求助

问题排查与解决方案

一、光标不可见问题的核心原因与修复

当前代码通过**无边框窗口+手动定位至(0,0)**模拟全屏,而非GLFW原生的全屏独占模式,这种方式易与窗口管理器的光标渲染逻辑冲突,导致窗口聚焦时光标被隐藏;同时光标模式设置的时机可能被窗口创建后的系统事件覆盖。

修复方案1:使用GLFW原生全屏独占模式(推荐)

将窗口创建时的monitor参数从nullptr改为获取到的主显示器,让GLFW直接接管显示器,避免窗口管理器干扰:

// 原代码
// window = glfwCreateWindow(WIDTH, HEIGHT, "MV_Game", nullptr, nullptr);

// 修改后
window = glfwCreateWindow(WIDTH, HEIGHT, "MV_Game", monitor, nullptr);

同时可删除glfwSetWindowPos(window, 0, 0);,原生全屏模式会自动占满整个显示器。

修复方案2:针对无边框窗口的光标强制设置

若坚持使用无边框模拟全屏,添加窗口聚焦回调,每次窗口获得焦点时强制重置光标可见性:
在glfwMakeContextCurrent(window);之后添加:

glfwSetWindowFocusCallback(window, [](GLFWwindow* win, int focused) {
    if (focused) {
        glfwSetInputMode(win, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
    }
});

该回调会覆盖窗口管理器对光标状态的潜在修改。

二、Discord共享显示第一帧的问题修复

此问题多由帧交换不稳定导致,开启垂直同步可让帧渲染与显示器刷新率同步,解决捕获异常:
在gladLoadGLLoader之后添加:

glfwSwapInterval(1); // 开启垂直同步

同时建议添加视口初始化,确保渲染区域正确:

glViewport(0, 0, WIDTH, HEIGHT);

三、额外检查点

  • 确保使用GLFW最新稳定版,旧版本可能存在无边框窗口的光标bug
  • 测试时关闭录屏、桌面增强工具等可能干扰窗口渲染的软件

内容的提问来源于stack exchange,提问作者LarsingDash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 15:07:27