Обновить размер окна в заголовке при изменении размера
Я хотел бы иметь заголовок окна, который обновляется каждый раз, когда размер окна изменяется. Он должен быть в таком формате, чтобы заголовок отображал Размер окна - [ширина] 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);