【问题标题】:SDL2 Message Box not showing colors, parent does not workSDL2 消息框不显示颜色,父级不起作用
【发布时间】: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,使用 parentcolors 就像将它们设置为 NULL

我什至尝试从documentation 复制整个示例,并用它替换所有closeWindowMessageBox() 函数,除了父函数,替换为ma​​inWindow

好吧,现在父母工作了(防止其他事件发生,直到我点击一个按钮)。

我认为因为我需要先初始化 ma​​inWindow
closeWindowMessageBox()mainWindow 的初始化之后被调用,所以它起作用了

不同之处在于,在标题中定义它们时,它会采用mainWindow 的当前值,即NULL,希望对遇到同样问题的人有所帮助。

仍然没有颜色,我错过了什么?,谢谢。

【问题讨论】:

  • 配色方案仅支持 x11 和 android。至于父母,您的示例肯定将其设置为 NULL。
  • 所以我的结论是最好在 windows 中将配色方案设置为 NULL,除非我希望它可移植,感谢您提供的信息。 ++;

标签: windows colors parent sdl-2 messagebox


【解决方案1】:

配色方案功能在 Windows 中不可用,或者至少目前不可用。

【讨论】:

  • 你知道这是否也是我没有得到图标的原因吗?
  • 我没有尝试过,但如果不可能,所以我为您提供了 2 个解决方案,您可以使用 Qt(它以非常简单的 HTML/CSS 方式支持几乎所有内容的配色方案) .如果您的目标只是像我一样使用 SDL2 创建 OpenGL 上下文,您可以编写自己的消息框系统(使用事件处理绘制文本/矩形,即switch case),如果您有 OpenGL 经验并且可以使用,这很容易如果你愿意的话,一个图书馆。第二种解决方案的唯一缺点是所有 msgbox 都在父级中。如果您的目标只是使用上下文,这不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多