Обновить размер окна в заголовке при изменении размера

Я хотел бы иметь заголовок окна, который обновляется каждый раз, когда размер окна изменяется. Он должен быть в таком формате, чтобы заголовок отображал Размер окна - [ширина] x [высота], но в результате я получил заголовок, отображающий _alloca, был поврежден.

int main(void)
{
    GLFWwindow *window = NULL; //initialise window with pointer to GLFW handle
    glfwSetErrorCallback(error_callback);

    //initialise GLFW
    if (!glfwInit())
    {
        //if failed to initialise GLFW
        exit(EXIT_FAILURE);
    }
    //minimum OpenGL version 3.3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

    //create the window here
    window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Window Size - " + WINDOW_WIDTH + "x" + WINDOW_HEIGHT, NULL, NULL);

    //if window fail, terminate GLFW
    if (window == NULL)
    {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }

    glfwMakeContextCurrent(window); // set window context as the current context
    glfwSwapInterval(1);            // swap buffer interval

    // initialise GLEW
    if (glewInit() != GLEW_OK)
    {
        // if failed to initialise GLEW
        cerr << "GLEW initialisation failed" << endl;
        exit(EXIT_FAILURE);
    }

    //set key callback function
    glfwSetKeyCallback(window, key_callback);

    //render loop
    while (!glfwWindowShouldClose(window))
    {
        glClear(GL_COLOR_BUFFER_BIT);

        glfwSwapBuffers(window);    //swap buffers
        glfwPollEvents();           //poll for events
    }

    //close window, terminate GLFW
    glfwDestroyWindow(window);
    glfwTerminate();
    exit(EXIT_SUCCESS);
}

1 ответ

Как уже упоминалось в комментариях @NicoleBolas, проблемная часть

"Window Size - " + WINDOW_WIDTH + "x" + WINDOW_HEIGHT

Это законно C++, но не делает то, что вы ожидаете. Здесь значение WINDOW_WIDTH добавляется к адресу "Window Size" постоянная. В результате получается новый указатель, который в вашем случае указывает на неверный адрес памяти.

Если вы хотите добавить ширину и высоту как текст, вы должны сначала преобразовать числа в текст, а затем объединить получившиеся строки. Один простой способ сделать это с помощью stringstream:

std::stringstream s;
s << "Window Size - " << WINDOW_WIDTH << "x" << WINDOW_HEIGHT;

window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, s.str().c_str(), NULL, NULL);
Другие вопросы по тегам