SDL2 - Window 无法重新打开
SDL2 - Window cannot be reopened
我正在用 2 windows.
编写一个简单的 SDL2 应用程序
第一个 window(window
变量)在应用程序启动时显示,第二个(window2
变量)隐藏。
预期行为:
我点击第一个window,弹出第二个window,然后关闭第二个window。
我可以随心所欲地关闭和重新打开 window。
观察到的行为:
关闭第二个 window 后,如果我重新单击第一个 window,第二个 window 不会按预期出现。
如 所述:window 没有出现在我的 window 经理(即 Wayland)中。
代码:
#include <SDL2/SDL.h>
int main()
{
SDL_Window* window, *window2 = NULL;
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
return 1;
} else {
window = SDL_CreateWindow("ONE", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
window2 = SDL_CreateWindow("TWO", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 320, 240, SDL_WINDOW_HIDDEN);
if (window == NULL || window2 == NULL) {
SDL_DestroyWindow(window);
SDL_DestroyWindow(window2);
return 1;
}
bool running = true;
while(running) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_WINDOWEVENT) {
if (event.window.event == SDL_WINDOWEVENT_CLOSE) {
if (SDL_GetWindowID(window) == event.window.windowID) {
running = false;
} else {
SDL_HideWindow(window2);
}
}
} else if (event.type == SDL_MOUSEBUTTONDOWN) {
SDL_ShowWindow(window2);
}
}
}
}
SDL_DestroyWindow(window);
SDL_DestroyWindow(window2);
SDL_Quit();
return 0;
}
您应该调用 SDL_RaiseWindow 将第二个 window 放在另一个之上。
来自 lazyfoo's 个传奇的 SDL 教程:
void LWindow::focus()
{
//Restore window if needed
if( !mShown )
SDL_ShowWindow( mWindow );
//Move window forward
SDL_RaiseWindow( mWindow );
}
这是一个SDL bug that may or may not have been fixed by this patch。
我正在用 2 windows.
编写一个简单的 SDL2 应用程序第一个 window(window
变量)在应用程序启动时显示,第二个(window2
变量)隐藏。
预期行为:
我点击第一个window,弹出第二个window,然后关闭第二个window。
我可以随心所欲地关闭和重新打开 window。
观察到的行为:
关闭第二个 window 后,如果我重新单击第一个 window,第二个 window 不会按预期出现。
如
代码:
#include <SDL2/SDL.h>
int main()
{
SDL_Window* window, *window2 = NULL;
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
return 1;
} else {
window = SDL_CreateWindow("ONE", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
window2 = SDL_CreateWindow("TWO", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 320, 240, SDL_WINDOW_HIDDEN);
if (window == NULL || window2 == NULL) {
SDL_DestroyWindow(window);
SDL_DestroyWindow(window2);
return 1;
}
bool running = true;
while(running) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_WINDOWEVENT) {
if (event.window.event == SDL_WINDOWEVENT_CLOSE) {
if (SDL_GetWindowID(window) == event.window.windowID) {
running = false;
} else {
SDL_HideWindow(window2);
}
}
} else if (event.type == SDL_MOUSEBUTTONDOWN) {
SDL_ShowWindow(window2);
}
}
}
}
SDL_DestroyWindow(window);
SDL_DestroyWindow(window2);
SDL_Quit();
return 0;
}
您应该调用 SDL_RaiseWindow 将第二个 window 放在另一个之上。 来自 lazyfoo's 个传奇的 SDL 教程:
void LWindow::focus()
{
//Restore window if needed
if( !mShown )
SDL_ShowWindow( mWindow );
//Move window forward
SDL_RaiseWindow( mWindow );
}
这是一个SDL bug that may or may not have been fixed by this patch。