opengl 没有标题栏的glfw窗口

ijnw1ujt  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(546)

我正在尝试一种方法来切换我的窗口之间的窗口模式和全屏模式。我已经成功地做了,除了一个问题。标题栏是不工作!你不能移动窗口也。没有这段代码一切工作都很好。
setFullscreen方法:

void Window::setFullscreen(bool fullscreen)
{
    GLFWmonitor* monitor = glfwGetPrimaryMonitor();
    const GLFWvidmode* mode = glfwGetVideoMode(monitor);

    if (fullscreen) {
        glfwSetWindowMonitor(m_window, monitor, 0, 0, mode->width, mode->height, mode->refreshRate);
        glViewport(0, 0, mode->width, mode->height);
    }

    if (!fullscreen) {
        glfwSetWindowMonitor(m_window, nullptr, 0, 0, m_width, m_height, GLFW_DONT_CARE);
        glViewport(0, 0, m_width, m_height);
    }
}

代码的结果:

iqxoj9l9

iqxoj9l91#

@tomasantunes帮我弄明白这一点。
在setFullscreen中,我将窗口设置为0、0或屏幕左上角。标题栏实际上并没有消失,只是离开了屏幕。因此,如果我将窗口设置为100、100,标题栏就会恢复。我犯了这样一个愚蠢的错误,这是相当愚蠢的。

if (!fullscreen) {
    glfwSetWindowMonitor(m_window, nullptr, 0, 0, m_width, m_height, GLFW_DONT_CARE); // I set the position to 0,0 in the 3rd and 4th parameter
    glViewport(0, 0, m_width, m_height);
}

固定代码:

if (!fullscreen) {
    glfwSetWindowMonitor(m_window, nullptr, 100, 100, m_width, m_height, GLFW_DONT_CARE); // I set the position to 100, 100 
    glViewport(0, 0, m_width, m_height);
}

新结果:

gcuhipw9

gcuhipw92#

不确定您是否还在寻找答案,但是,我这里的代码修复了您最初遇到的相同问题。
在更改为全屏模式之前,请保存窗口位置和大小。

int xPos, yPos, width, height; //have somewhere stored out of function scope.
    glfwGetWindowPos(windowPtr, &xPos, &yPos);
    glfwGetWindowSize(windowPtr, &width, &height);

然后在从全屏更改回窗口模式时,应用保存的位置和大小属性。

glfwSetWindowMonitor(windowPtr, nullptr, xPos, yPos, width, height, 0); //Refresh rate is ignored without an active monitor.

相关问题