c++ - SDL2 : how to raise window (on top of calling terminal)

标签 c++ centos6 sdl-2

窗口总是在后台弹出,但我希望它在前台,至少在终端前面,在终端中执行打开窗口的代码。

我不需要关注那个窗口,所以只需要在没有焦点的情况下提升就可以了。 (SDL2 Raising a window without giving it focus)。

我已经尝试了所有的 SDL_WindowFlags,但似乎都没有用。 SDL_RaiseWindow() 也没有帮助。

该窗口用于以图形方式显示终端程序的结果。 我在 CentOs 6.4 上从源代码 2.0.3 编译了 SDL2

我编译了下面的程序并从 KDE 中的 bash 终端启动它(焦点窃取预防级别:低,焦点策略:点击焦点)。

示例代码:

#include <SDL.h>

int main(int, char**){
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480,
        SDL_WINDOW_SHOWN | SDL_WINDOW_INPUT_GRABBED |
        SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS |
        SDL_WINDOW_FOREIGN | SDL_WINDOW_OPENGL);
    SDL_RaiseWindow(win);

    SDL_Delay(4000);
    SDL_DestroyWindow(win);
    SDL_Quit();

    return 0;
}

编辑: 我在 Windows 下的 Cygwin64 中尝试过相同的示例。在这种情况下,窗口会在终端前弹出。那么这是 CentOS/window-manager 的问题吗?

最佳答案

KDE/CentOs 中的行为取决于窗口管理器的防止焦点窃取级别设置。它被设置为。 当我将其设置为 none 时,窗口将在顶部升起。 我的新问题是:即使设置low,我能否以某种方式强制升高窗口? ( https://stackoverflow.com/questions/28785519/force-window-to-be-raised-with-focus-stealing-prevention-level-low )

Windows 中的 Cygwin64 下也会出现该窗口。

关于c++ - SDL2 : how to raise window (on top of calling terminal),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28782681/

相关文章:

c++ - clGetPlatformIDs 返回两个平台,但它们是相同的

limit - 如何在 Centos 6.4 x64 上更改 root 用户的限制打开文件

ios - Apache 在 Vagrant 中创建/编写目录

c++ - C++基类在编译时未定义

c++ - 指向方法的指针/传递此指针/boost::bind

java - 使用界面在后台运行 matlab

c++ - 如何启动一个在应用程序退出时不关闭的线程? (Qt C++)

networking - GCE 实例无法访问 - 连接 : Network is unreachable

c++ - 使用 VS 的 SDL 2.0 构建错误

c++ - SDL 2 程序使用 1.4 GB 内存?