我需要在窗口上显示工具提示。我正在使用工具提示创建第二个窗口,并使用SDL_RaiseWindow()将其置于顶部。但是,这样做会导致工具提示窃取焦点,这不是我想要的。有没有办法在不改变焦点的情况下将窗口移到顶部?
另外,有没有办法在不改变窗口的Z顺序的情况下设置焦点(鼠标和/或键盘)?
答案 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);