【发布时间】:2018-03-24 00:22:30
【问题描述】:
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;
}
}
但是,消息框没有颜色
也可能没有父级(不在主窗口顶部)
它不应该阻止我点击父级,我的意思是像 .NET
中的对话框
SDL中的父窗口到底是什么意思?
如您所见,我从游戏窗口最小化游戏(消息框没有阻止我)
而这个灰色消息框不是,它只是在屏幕上的某个地方,没有父母可以拿着它。
我正在开发最新的 SDL2,使用 parent 或 colors 就像将它们设置为 NULL。
我什至尝试从documentation 复制整个示例,并用它替换所有closeWindowMessageBox() 函数,除了父函数,替换为mainWindow。
好吧,现在父母工作了(防止其他事件发生,直到我点击一个按钮)。
我认为因为我需要先初始化 mainWindowcloseWindowMessageBox() 在mainWindow 的初始化之后被调用,所以它起作用了
不同之处在于,在标题中定义它们时,它会采用mainWindow 的当前值,即NULL,希望对遇到同样问题的人有所帮助。
仍然没有颜色,我错过了什么?,谢谢。
【问题讨论】:
-
配色方案仅支持 x11 和 android。至于父母,您的示例肯定将其设置为 NULL。
-
所以我的结论是最好在 windows 中将配色方案设置为
NULL,除非我希望它可移植,感谢您提供的信息。 ++;
标签: windows colors parent sdl-2 messagebox