SDL2 消息框不显示颜色,parent 不起作用
SDL2 Message Box not showing colors, parent does not work
SDL_Window* mainWindow = NULL;
void cleanup();
const SDL_MessageBoxButtonData msgBox_CloseWindow_Buttons [] = {
{0, 0, "Nope"},
{SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 1, "Yup"},
{SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 2, "Cancel it"},
};
const SDL_MessageBoxColorScheme msgBox_CloseWindow_ColorScheme = {
{
// SDL_MESSAGEBOX_COLOR_BACKGROUND
{255, 0, 0},
// SDL_MESSAGEBOX_COLOR_TEXT
{0, 255, 0},
// SDL_MESSAGEBOX_COLOR_BUTTON_BORDER
{255, 255, 0},
// SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND
{0, 0, 255},
// SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED
{255, 0, 255}
}
};
const SDL_MessageBoxData msgBox_CloseWindow_Data = {
// flag
SDL_MESSAGEBOX_INFORMATION,
// window
mainWindow,
// title
"Game Terminating",
// message
"Do you really want to close this way?",
// number of buttons
SDL_arraysize(msgBox_CloseWindow_Buttons),
msgBox_CloseWindow_Buttons,
&msgBox_CloseWindow_ColorScheme
};
void closeWindowMessageBox()
{
if(SDL_ShowMessageBox(&msgBox_CloseWindow_Data, &nbutton) < 0)
{
SDL_Log("error displaying box");
exit(1);
}
switch (nbutton)
{
case -1:
SDL_Log("Game Closing - No Selection");
break;
case 0:
SDL_Log("Game Closing - Rejected");
break;
case 1:
SDL_Log("Game Closing - Approved");
cleanup();
break;
case 2:
SDL_Log("Game Closing - Canceled");
break;
}
}
void Game::ProcessEvents(SDL_Event event)
{
switch(event.key.keysym.sym)
{
...
}
switch(event.type)
{
case SDL_QUIT:
closeWindowMessageBox();
break;
}
}
但是,消息框没有颜色
也可能没有 parent(不在主 window 的顶部)
它不应该阻止我点击 parent,我的意思是像 .NET
中的对话框
SDL 中的 parent window 是什么意思?
如你所见,我从游戏window(消息框最小化游戏没有阻止我)
这个 灰色 消息框 不是 ,它只是在屏幕上的某个地方,没有 parent 容纳它。
我正在研究最新的 SDL2,使用 parent 或 colors 就像将它们设置为 NULL
.
我什至尝试从 documentation 复制整个示例并用它替换所有 closeWindowMessageBox()
函数,除了 parent,替换为 mainWindow.
嗯,现在 parent 起作用了(防止其他事件发生,直到我单击按钮)。
我想因为我需要先初始化mainWindow
closeWindowMessageBox()
在 mainWindow
初始化后被调用,所以它有效
不同之处在于,在header中定义它们时,它会采用mainWindow
的当前值,即NULL
,希望对遇到同样问题的人有所帮助。
仍然没有颜色,我错过了什么?,谢谢。
配色方案功能在 Windows 中不可用,或者至少目前不可用。
SDL_Window* mainWindow = NULL;
void cleanup();
const SDL_MessageBoxButtonData msgBox_CloseWindow_Buttons [] = {
{0, 0, "Nope"},
{SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 1, "Yup"},
{SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 2, "Cancel it"},
};
const SDL_MessageBoxColorScheme msgBox_CloseWindow_ColorScheme = {
{
// SDL_MESSAGEBOX_COLOR_BACKGROUND
{255, 0, 0},
// SDL_MESSAGEBOX_COLOR_TEXT
{0, 255, 0},
// SDL_MESSAGEBOX_COLOR_BUTTON_BORDER
{255, 255, 0},
// SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND
{0, 0, 255},
// SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED
{255, 0, 255}
}
};
const SDL_MessageBoxData msgBox_CloseWindow_Data = {
// flag
SDL_MESSAGEBOX_INFORMATION,
// window
mainWindow,
// title
"Game Terminating",
// message
"Do you really want to close this way?",
// number of buttons
SDL_arraysize(msgBox_CloseWindow_Buttons),
msgBox_CloseWindow_Buttons,
&msgBox_CloseWindow_ColorScheme
};
void closeWindowMessageBox()
{
if(SDL_ShowMessageBox(&msgBox_CloseWindow_Data, &nbutton) < 0)
{
SDL_Log("error displaying box");
exit(1);
}
switch (nbutton)
{
case -1:
SDL_Log("Game Closing - No Selection");
break;
case 0:
SDL_Log("Game Closing - Rejected");
break;
case 1:
SDL_Log("Game Closing - Approved");
cleanup();
break;
case 2:
SDL_Log("Game Closing - Canceled");
break;
}
}
void Game::ProcessEvents(SDL_Event event)
{
switch(event.key.keysym.sym)
{
...
}
switch(event.type)
{
case SDL_QUIT:
closeWindowMessageBox();
break;
}
}
但是,消息框没有颜色
也可能没有 parent(不在主 window 的顶部)
它不应该阻止我点击 parent,我的意思是像 .NET
中的对话框
SDL 中的 parent window 是什么意思?
如你所见,我从游戏window(消息框最小化游戏没有阻止我)
这个 灰色 消息框 不是 ,它只是在屏幕上的某个地方,没有 parent 容纳它。
我正在研究最新的 SDL2,使用 parent 或 colors 就像将它们设置为 NULL
.
我什至尝试从 documentation 复制整个示例并用它替换所有 closeWindowMessageBox()
函数,除了 parent,替换为 mainWindow.
嗯,现在 parent 起作用了(防止其他事件发生,直到我单击按钮)。
我想因为我需要先初始化mainWindow
closeWindowMessageBox()
在 mainWindow
初始化后被调用,所以它有效
不同之处在于,在header中定义它们时,它会采用mainWindow
的当前值,即NULL
,希望对遇到同样问题的人有所帮助。
仍然没有颜色,我错过了什么?,谢谢。
配色方案功能在 Windows 中不可用,或者至少目前不可用。