SDL2在不给予焦点的情况下抬起窗口

时间:2014-08-04 20:02:41

标签: window sdl-2 setfocus

我需要在窗口上显示工具提示。我正在使用工具提示创建第二个窗口,并使用SDL_RaiseWindow()将其置于顶部。但是,这样做会导致工具提示窃取焦点,这不是我想要的。有没有办法在不改变焦点的情况下将窗口移到顶部?

另外,有没有办法在不改变窗口的Z顺序的情况下设置焦点(鼠标和/或键盘)?

3 个答案:

答案 0 :(得分:0)

老问题,但这是在我自己的搜索过程中出现的。您可以尝试SDL_RaiseWindow()将工具提示置于顶部,然后在主窗口上使用SDL_SetWindowInputFocus()将焦点切换回它。

答案 1 :(得分:0)

Neil 提供的答案仅适用于X11 ,因为SDL_SetWindowInputFocus()仅适用于该环境。实质上,期望的行为是不可实现的。我已经看到SDL论坛中有一个功能请求,要求SDL_RaiseWindow()函数重载,以包含一个可选的bool参数,以指示凸起的窗口是否也应该接收输入焦点。我希望他们实现它。

在任何情况下,SDL 2.x下对多个窗口的支持都有点弱。不存在对不同窗口的Z顺序的内置支持,并且尝试基于“画家方法”构建一个窗口,但是不能控制输入焦点。

答案 2 :(得分:0)

通过在SDL2上使用SDL_WINDOW_ALWAYS_ON_TOP标志,我在Mac上的工具提示中已充分发挥了作用:

SDL_CreateWindow(tooltip_window->name, x, y, w, h,
    SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS |
    SDL_WINDOW_ALWAYS_ON_TOP);
SDL_RaiseWindow(windowThatShouldHaveFocus);
// ...render what you want on that tooltip (SDL_RenderClear, SDL_RenderCopy, SDL_RenderPresent) & hide it with SDL_HideWindow

当显示工具提示时:

SDL_ShowWindow(tooltipWindow);
SDL_RaiseWindow(windowThatShouldHaveFocus);